Программный вход в Spring Security 2 - PullRequest
2 голосов
/ 11 мая 2010

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

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

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

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 Ответ

3 голосов
/ 11 мая 2010

Похоже, вы должны написать свой собственный 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%, но вам следует начать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...