当前位置: 首页 > 知识库问答 >
问题:

如何在Spring安全登录表单中传递一个附加参数

景志
2023-03-14

我正在做一个项目,其中为登录身份验证实现了Spring Security。现在,我们希望当用户登录时,它连接到哪个数据库取决于一个参数,即我在登录过程中传递的参数,并希望在页面上访问该参数home.jsp我的代码为:

1)登录页面url

/登录

     <form action="<c:url value='/j_spring_security_check' />" id="login"   method="POST">              
        <input type="text" id="userid" name='j_username' placeholder="Your User Name"/>

        <input id="password" type="password" name='j_password'  placeholder="Password" />

            <input type="submit" name="submit" value="Login"/>
    </form>

2)Spring表单登录为

<form-login always-use-default-target="true"  login-page="/login" default-target-url="/home"  authentication-failure-url="/login"  />

3) 访问决策管理器类

public class CustomAccessDecisionManager extends AbstractAccessDecisionManager {

    public void decide(Authentication authentication, Object filter,Collection<ConfigAttribute> configAttributes){

        // get all roles from ldap    
        checkAllowIfAllAbstainDecisions();
    }

}

网址为家.jsp

/首页

有人能帮我吗?我如何将一个额外的参数从登录页面传递到主页。如果我在登录前进行会话,它会直接重定向到主页。所以有任何方法可以将项目名称从登录页面传递到主页。

共有1个答案

谭学名
2023-03-14

您可以像表单中的用户名和密码一样传递额外的参数,并在身份验证处理过滤器中设置AuthenticationDetailsSource(在HTTP安全配置中;Java/XML,无论是什么),并从添加到身份验证对象的请求中获取所需的详细信息(作为详细信息;在AbstractAuthenticationToken中声明)。下面是如何将AuthenticationDetailsSource注册到筛选器的提示。

AbstractAuthenticationProcessingFilter#setAuthenticationDetailsSource(
        AuthenticationDetailsSource<HttpServletRequest, ?> authenticationDetailsSource)

身份验证处理过滤器(我假设您使用默认的UsernamePasswordAuthenticationFilter进行表单登录)将通过在身份验证尝试身份验证(HttpServletRequest请求,HttpServletResponse响应)中调用setDetails(request,authRequest)来完成其余操作。我建议您查看UsernamePasswordAuthenticationFilter,了解如何提取您想要的确切细节(最后通过request.getParameter(“param_name”))。

在身份验证对象中设置参数后,可以使用身份验证成功处理程序在应用内访问它(现在也可以使用会话)。

 类似资料:
  • 我正在尝试将数据库名称设置为Spring Security登录页面的请求输入参数。目前,我只获得使用Spring安全安全检索的用户名。 如何访问登录页面上设置的附加字段?

  • 问题内容: 我正在尝试从Spring安全性登录页面将数据库名称设置为请求输入参数。目前,我只获得使用spring security检索到的用户名。 如何访问在登录页面上设置的其他字段? 问题答案: 详细阐述@Vacuum的评论 这是一种简单的方法(未经测试,但我相信这会起作用) 1)创建一个新类,它将扩展默认过滤器并获取其他参数并将其存储在会话中。它看起来像这样: 2)在你的实现中,修改你的实现:

  • 我使用Spring MVC和Spring Security进行认证。我用用户名和密码登录,但我想再发送两个参数。有什么办法可以做到吗? 这是登录表单: 我也想在登录中发送时区和语言。 以及

  • 问题内容: 我有一个Maven项目,运行命令 mvn后,安装 所有项目以及模块编译并成功复制到本地存储库。但是现在我想在tomcat6中运行生成的Web应用程序。客户端为tomcat提供了一些参数,例如一旦项目启动,这些参数将在内部使用。但是我不知道如何在tomcat6中设置这些附加参数。下面是我的开发环境 操作系统= Windows Tomcat = Tomcat 6.0.27 请帮我? 问题答

  • 问题内容: 假设我有这个功能: 我想这样称呼它: 当然,不能用这种方法来完成,因为Postgres试图用该名称和三个不存在的参数来查找函数。 我试图用引号引起来,但在这种情况下,参数解释错误: data1’,’data2’,’data3 ,就像一个字符串一样。 有没有一种方法可以在参数中放置多个值,以便IN子句可以识别它? 问题答案: 您的函数将不会被创建。之后是句法废话。 无论哪种方式,带有 参

  • 我正在使用Spring微服务构建微服务,我有两个相关的问题。 1。我在Api网关(即Zuul服务器)中有Spring安全性,现在Zuul不会转发任何请求,如果我已经从流中读取请求一次以身份验证(从POST请求中获取用户名/通行证) 如何读取请求,然后再次将相同的请求转发给下游服务? 2.Zuul没有转发request.set属性()到下游服务,所以一个解决办法是使用ctx.addZuulask e