2013-03-12 4 views
0

Я использую Spring Security 3.0.6 с JSF Mojarra 2.1.18 и Primefaces 3.5.Ошибка безопасности в Spring Security

Я создал LoginManagedBean, который вводит AuthenticationManager Spring Security.

@ManagedBean 
    @SessionScoped 
    public class LoginManagedBean implements Serializable { 

     private static final long serialVersionUID = 1L; 

     private static transient final Log logger = LogFactory.getLog(LoginManagedBean.class); 

     private LoginDTO login; 

     private String username; 

     private String password; 

     @ManagedProperty(value = "#{authenticationManager}") 
     private transient AuthenticationManager authenticationManager = null; 

... 

Это работает. Но если логин завершается с ошибкой, я не могу снова войти в систему с правильными значениями. Я думаю, мне нужно очистить/сбросить объект authenticationManager, но я не знаю, как это сделать. Какие-либо предложения? Заранее спасибо!

ответ

1

Вы должны быть другим способом.

1) определение аутентификации менеджер

<s:authentication-manager> 
    <s:authentication-provider> 
     <s:user-service> 
      <s:user name="root" password="root"/> 
     </s:user-service> 
    </s:authentication-provider> 
</s:authentication-manager> 

2) определяют конфигурации безопасности и форма входа

<s:http auto-config="true" use-expressions="true"> 
    <s:intercept-url pattern="/favicon.ico" access="permitAll"/> 
    <s:intercept-url pattern="/resources/**" access="permitAll"/> 
    <s:intercept-url pattern="/login**" access="isAnonymous"/> 
    <s:intercept-url pattern="/pages/*" access="hasAuthority('ROLE_USER')"/>  
    <s:form-login login-page="/login.xhtml" default-target-url="/" 
        authentication-failure-url="/login.xhtml?loginFailed=true"/> 
</s:http> 

3) поставил @EnableWebMvc на некотором @Configuration

4) создать форму на login.xml размещать данные (поля j_username и j_password) до /j_spring_security_check

5) добавить фильтр 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> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>REQUEST</dispatcher> 
</filter-mapping> 
+0

Это была ошибка в весенней безопасности 3.0.6. По какой-то причине пароль был удален после исключения BadCredentialsException (см. AuthenticationException.java:58). После неудачного входа в систему указанный пароль всегда проверял значение null, что не удалось. Я переключился на 3.0.8, и это решило проблему. Я также попытался перейти на 3.1.3, но это казалось важной задачей. – Caron

+0

Но почему вы используете authenticationManager напрямую вместо встроенных решений? –

+0

Я хотел сделать это методом JSF, и мне было легче вводить аутентификационный менеджер вместо публикации некоторых полей в URL. Кстати, я не тестировал его, но проблема осталась неизменной с 3.0.6. С уважением – Caron

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