2010-05-11 3 views
2

Я пытаюсь найти способ пропустить форму входа, когда пользователь нажимает на ссылку «активировать учетную запись», которую он получил по электронной почте. Эта ссылка содержит одноразовый случайный токен, который может служить методом аутентификации.Программный логин в Spring Security 2

В результате этого токена я могу получить информацию о пользователе и активировать его учетную запись, но я еще не нашел способ входа в систему программно.

Я ищу способ реализовать что-то вроде этого:

недействительным forceLogin (String имя пользователя);

Возможно ли это?

Моя конфигурация пружинного безопасности заключается в следующем:

<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 Spring Security добавить строку:

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

Смежные вопросы