当用户点击他通过电子邮件收到的“激活帐户”链接时,我正试图找到一种跳过登录表单的方法。此链接包含一次性随机令牌,可用作身份验证方法。
通过此令牌,我可以检索用户详细信息并激活其帐户,但我还没有找到以编程方式登录的方法。
我正在寻找一种方法来实现这样的东西:
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>
答案 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%完成,但应该让你开始。