Spring Security забывает аутентификацию с пользовательской формой входа - PullRequest
0 голосов
/ 08 сентября 2011

Я более или менее последовал этому описанию, чтобы создать пользовательскую форму для входа в систему: http://technology -for-human.blogspot.com / 2011/01 / jsf-2-with-spring-3-protection-with.html

Форма входа использует LoginBean, а LoginBean использует AuthenticationService:

@Service("authenticationService")
public class AuthenticationService {
    @Resource(name = "authenticationManager")
    AuthenticationManager authenticationManager;

    public boolean login(String username, String password) {
        try {
            Authentication authenticate = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password));
            if (authenticate.isAuthenticated()) {
                SecurityContextHolder.getContext().setAuthentication(authenticate);
                return true;
            }
        } catch (AuthenticationException e) {
        }
    return false;
    }
}

Обычно все работает, как и ожидалось, методы входа возвращают true для моего пользователя.Но затем снова появляется форма входа в систему, и я вижу, что SecurityContextHolder.getContext().getAuthentication() возвращает ноль.

Конфигурация Spring выглядит следующим образом:

<security:http auto-config='true'>
    <security:form-login login-page="/login.jsf" />
    <security:intercept-url pattern="/login.jsf" filters="none" />
    <security:intercept-url pattern="/**" access="ROLE_USER" />
    <security:logout logout-url="/logout" logout-success-url="/" />
</security:http>

<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider user-service-ref="userDetailsService" />
</security:authentication-manager>

Есть идеи, что может быть причиной?

1 Ответ

0 голосов
/ 09 сентября 2011

Я думаю, что контекст безопасности не сохраняется обратно в сеанс.У вас есть springSecurityFilterChain, настроенный как фильтр в файле web.xml?

<filter>
  <filter-name>springSecurityFilterChain</filter-name>
  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
...