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

时间:2016-12-13 06:16:28

标签: mysql spring jsp spring-mvc spring-security

我正在开发一个项目,其中为登录身份验证实现了spring安全性。现在我们希望当用户登录时连接到哪个数据库依赖于我在登录期间传递的一个参数,并希望在home.jsp页面上访问此参数我的代码为:

1)登录页面网址

/登录

     <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)弹簧表格登录为

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

3)AccessDecissionManager类

public class CustomAccessDecisionManager extends AbstractAccessDecisionManager {

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

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

}
  1. home.jsp的网址

    /家

  2. 任何人都可以帮助我如何将一个额外的参数从登录页面传递到主页。如果我在登录前进行会话,则会直接重定向到主页。因此,有任何方法可以将项目名称从登录页面传递到主页。

1 个答案:

答案 0 :(得分:0)

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

AuthenticationDetailsSource

身份验证处理过滤器(我假设您使用默认的UsernamePasswordAuthenticationFilter进行表单登录)将通过调用AbstractAuthenticationProcessingFilter#setAuthenticationDetailsSource( AuthenticationDetailsSource<HttpServletRequest, ?> authenticationDetailsSource) 内的setDetails(request, authRequest)来完成剩下的工作。我建议您浏览UsernamePasswordAuthenticationFilter,了解如何提取您希望的确切详细信息(最后通过Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException)。

在身份验证对象中设置参数后,您可以使用AuthenticationSuccessHandler在应用内部访问它(现在您也可以使用会话)。