2010-05-11 100 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