Spring Security 2中的程序化登录

时间:2010-05-11 12:02:59

标签: spring authentication spring-security

当用户点击他通过电子邮件收到的“激活帐户”链接时,我正试图找到一种跳过登录表单的方法。此链接包含一次性随机令牌,可用作身份验证方法。

通过此令牌,我可以检索用户详细信息并激活其帐户,但我还没有找到以编程方式登录的方法。

我正在寻找一种方法来实现这样的东西:

  

void forceLogin(String username);

有可能吗?

我的弹簧安全配置如下:

<http>
<intercept-url pattern="/userAccount/logout.do" access="ROLE_USER"/>
... (More intercepts)

<form-login login-page="/userAccount/login.do"
  authentication-failure-url="/userAccount/login.do?failure=true"
  login-processing-url="/userAccount/j_spring_security_check.do"
  always-use-default-target="false"
  default-target-url="/userAccount/redirectAfterLogin.do"
  />

<anonymous />
<logout logout-url="/userAccount/logout.do" />
</http>

1 个答案:

答案 0 :(得分:3)

听起来你应该自己编写PreAuthenticationFilter

我会将AbstractPreAuthenticatedProcessingFilter子类化为类似于:

public class TokenAuthFilter extends AbstractPreAuthenticatedProcessingFilter {

   protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) {
      String token = request.getAttribute("customToken");
      //... look up user details based on this token
     String username = UserDao.getUserbyToken(token);
     return username;
   }

}

然后在Spring Security配置中,XML添加如下所示的行:

<bean id="tokenAuth" class="...TokenAuthFilter" >
   <security:custom-filter position="PRE_AUTH_FILTER" />
</bean>

不是100%完成,但应该让你开始。