2010-05-11 139 views
2

我试图找到一种方法,当用户点击他通过电子邮件收到的“激活帐户”链接时跳过登录表单。该链接包含一个可用作认证方法的一次性随机令牌。Spring Security中的程序化登录2

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

我正在寻找一种方式来实现这样的事情:

无效forceLogin(字符串用户名);

可能吗?

我的弹簧安全配置是这样的:

<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> 

回答

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; 
    } 

} 

然后在你的春季安全配置XML添加一行:

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

没有100%完成,但应该让你开始。

+0

''元素似乎[已被移至''部分](https://jira.springsource.org/browse/SEC-1186)。显然,这是Spring 3.0中一个向后不兼容的变化...... – 2012-10-09 08:50:24