是否可以在 Spring 中以基于表单的身份验证发送更多数据?

2023-12-19

我对这个比较陌生Spring框架 http://en.wikipedia.org/wiki/Spring_Framework和春季安全。

我使用了自定义身份验证方案 HTML:

<form action="j_spring_security_check">
    <input type="text" name="j_username" value="abc"/>
    <input type="text" name="j_password" value="abc"/>
    <input type="text" name="myCustom1" value="pqr"/> <!-- maybe type="hidden" -->
    <input type="text" name="myCustom2" value="pqr"/> <!-- maybe type="hidden" -->
</form>

以及相应的代码:

public class CustomAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider
{
    @Override protected void additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken)
    throws AuthenticationException
    {
        System.out.println("Method invoked : additionalAuthenticationChecks isAuthenticated ? :"+usernamePasswordAuthenticationToken.isAuthenticated());
    }

    @Override protected UserDetails retrieveUser(String username,UsernamePasswordAuthenticationToken authentication)
    throws AuthenticationException
    {
        System.out.println("Method invoked : retrieveUser");
        //I have Username,password:
        //HOW CAN I ACCESS "myCustom1", "myCustom2" here ?
    }
}

以上都是很棒且完美的解决方案。 但我使用了一种解决方案,效果非常好。 用于 ThreadLocal 的多租户 ID

package com.mypackage.servlet;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.springframework.util.Assert;

public class ThreadLocalContextUtil implements Filter{
     private static final ThreadLocal<Object> contextHolder =
                new ThreadLocal<Object>();

       public static void setTenantId(Object tenantId) {
          Assert.notNull(tenantId, "customerType cannot be null");
          contextHolder.set(tenantId);
       }

       public static Object getTenantId() {
          return contextHolder.get();
       }

       public static void clearTenant() {
          contextHolder.remove();
       }

    public void destroy() {

    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        // Set the tenant Id into a ThreadLocal object
        ThreadLocalContextUtil.setTenantId(request);
        if(chain != null)
            chain.doFilter(request, response);
        else {
            //error
        }
    }

    public void init(FilterConfig filterconfig) throws ServletException {

    }
}

弹簧安全XML

<security:http auto-config="true" use-expressions="true" access-denied-page="/forms/auth/403" >
    <security:custom-filter before="FIRST" ref="tenantFilter" />
    ......
    </security:http>

访问您的身份验证类中的请求对象

HttpServletRequest currRequest = (HttpServletRequest) ThreadLocalContextUtil.getTenantId();

然后使用请求对象来获取您的自定义参数

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以在 Spring 中以基于表单的身份验证发送更多数据? 的相关文章

随机推荐

  • 使用锚标记请求文件时强制浏览器不使用缓存

    我有一个锚标记 用于请求下载文件 像这样 a href app results fileName t12 txt other param something title Click to download Download a 该文件可能会
  • 通过迁移改变 Laravel 5 表

    我正在用 laravel 5 制作一个应用程序 我更改了我定义的 投票 字段 table gt enum vote 1 0 1 并且应该如下 table gt enum vote 1 2 3 4 5 为此 您应该执行以下步骤 创建新的迁移文
  • 在 Linux 上验证电子邮件地址

    我正在使用类似的命令sendmail bv email protected cdn cgi l email protection在向人们发送实际电子邮件之前验证某些电子邮件地址以确认该地址是否有效 它适用于我测试过的大多数网站 但有时 我使
  • Indy 的全局、线程安全、cookie 管理器

    我的 Delphi 2010 应用程序使用多线程上传内容 上传的数据被发布到需要登录的 PHP Web 应用程序 所以我需要使用共享 全局 cookie 管理器 我正在使用Indy10 修订版 4743 因为 TIdCookieManage
  • 不符合 Swift 中的 UITableViewDataSource 协议,为什么?

    这是我的代码 尽管我编写了两种方法的实现 但编译器仍然显示错误 请告诉我为什么 导入 UIKit class FirstViewController UIViewController UITableViewDelegate UITableV
  • 无法加载资源:net::ERR_EMPTY_RESPONSE http://test.com

    我正在开发一个 chrome 扩展 它将 XMLHttpRequest 发送到 URL 获取 JSON 格式的响应 解析响应并显示记录列表 它工作正常 问题是当用户执行任何操作并返回列表部分时 系统遵循相同的流程发送 XMLHttpRequ
  • 在 TypeScript 中扩展原生 JavaScript Number 对象

    根据 TypeScript 文档 扩展已经存在的接口就像使用新属性重新声明它一样简单 然后为这些属性提供实现 我曾多次使用这种技术向本机 JavaScript 对象添加静态方法扩展 然而 这不适用于成员函数 例如 TypeScript Pl
  • Linux中文件描述符的上限

    在任何 Linux 系统 特别是 ubuntu 10 04 中可以使用的文件描述符的上限是多少 我使用的是 Ubuntu 10 04 64 位 服务器的 CPU 架构是 x86 64 客户端的 CPU 架构是 i686 现在我已经将我的 f
  • Maven 校验和失败

    我正在开发一个使用 Maven 作为构建工具的项目 我使用的是该工具的 2 2 1 版本 最近 一位同事提到 由于校验和错误 他无法构建该项目 我没有收到这些错误 因此我删除了本地存储库 果然 我在下次尝试构建时也遇到了校验和错误 我们使用
  • 无法终止线程

    我在我的项目中使用线程 我想立即杀死并终止一个线程 sample type test class TThread private Private declarations protected procedure Execute overri
  • 如何在屏蔽数组上运行numpy函数percentile()?

    我尝试从具有 NoData 值的数组中检索百分位数 在我的例子中 Nodata 值由 3 40282347e 38 表示 我认为屏蔽数组会从进一步的计算中排除这些值 我成功创建了掩码数组 但对于 np percentile 函数 掩码没有效
  • 在 jQuery/JavaScript 中模拟链接上的点击

    我想使用 JavaScript 模拟点击页面上的任何链接 如果该链接有某个函数绑定到其 onclick 事件 通过我无法控制的任何其他 JS 则必须调用该函数 否则该链接应以正常方式运行并打开一个新页面 我不确定仅检查 onclick 处理
  • 在为内核编码时可以使用 stdio...吗?

    我需要构建一个操作系统 一个非常小且基本的操作系统 实际上功能最少 用 C 编写 可能是一个 CUI 操作系统 它可以进行一些内存管理 并且至少有一个文本编辑器和一个计算器 它只是一个关于如何编写对硬件具有完全和直接控制的代码的实验 我仍然
  • 使用顶点着色器旋转纹理

    我正在尝试旋转顶点着色器内的纹理 我有一个指向纹理的指针 出于我的目的 该指针逆时针旋转 90 度 我不想要在调用之前手动旋转纹理glTexImage2D 我可以用 version 120 only 这是我原来的顶点着色器 version
  • 更改 R/lattice 中与多个面板关联的条带的背景和文本

    以下是我正在处理的示例 require lattice data barley xyplot yield year site data barley 我想为不同的 sprips 设置不同的条带颜色 并且字体颜色也根据背景颜色进行不同的优化
  • 如何在 Android 应用程序中创建数据库?

    我正在尝试在我的 Android 应用程序中使用 SQLite 我创建了这样的辅助类 public class EventoSQLHelper Configura o da base nome e vers o private static
  • searchable_dropdown 不适用于类列表

    我使用 searchable dropdown 1 1 0 包实现了一个颤振下拉菜单 我用我的班级列表进行了测试 发现搜索文本字段框不适用于我的班级列表 我希望当我在列表中的字符串 整数中搜索值时 我的下拉搜索框能够正常工作 例如 我希望当
  • 未知的正则化器:tensorflowjs 中的 L2

    我已经使用 model 在 python 中训练了一个模型 reg 0 000001 model Sequential model add Dense 24 activation tanh name input dense input sh
  • SQL:给定行之前和之后的行数

    问题是我们要获取给定行 例如由主键标识 之前和之后的总行数 我尝试过在 T SQL MSSQL 2008 中执行以下操作 它给出了正确的结果 但我不知道这是否是最好的方法 WITH cte before AS SELECT ROW NUMB
  • 是否可以在 Spring 中以基于表单的身份验证发送更多数据?

    我对这个比较陌生Spring框架 http en wikipedia org wiki Spring Framework和春季安全 我使用了自定义身份验证方案 HTML