2014-01-13 5 views
0

Я пишу простое веб-приложение с использованием весенней безопасности 3.2.0 и весной рамки 4.x. Я вижу, что имя пользователя/пароль проходит через пользовательский поставщик auth, но фактическая проверка подлинности не выполняется; то есть, при вводе неправильного пароля я до сих пор принято на сообщение Логин URL/приборную панель ...spring security не аутентифицирован

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
      <param-value> 
       /WEB-INF/spring-config.xml 
       /WEB-INF/spring-security-config.xml 
      </param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <servlet> 
     <servlet-name>frontController</servlet-name> 
     <servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    </servlet> 
    <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> 

    <servlet-mapping> 
     <servlet-name>frontController</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

    </web-app> 

весна-безопасности config.xml

<?xml version="1.0" encoding="UTF-8"?> 

<beans:beans xmlns="http://www.springframework.org/schema/security" 
    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
      http://www.springframework.org/schema/security 
      http://www.springframework.org/schema/security/spring-security.xsd"> 
    <http> 
     <intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <intercept-url pattern="/dashboard*" access="ROLE_USER" /> 

     <form-login login-page='/login' default-target-url='/dashboard' 
      always-use-default-target='true' authentication-failure-url="/login?error=true" /> 
     <logout logout-success-url="/" /> 

    </http>  
    <authentication-manager alias="authenticationManager"> 
     <authentication-provider ref="myAuthenticationProvider" /> 

    </authentication-manager> 

</beans:beans> 

Пользовательский поставщик auth не делает ничего, кроме делегирования на обслуживание пользователя:

public class AuthenticationProvider extends DaoAuthenticationProvider { 
    //nothing here 
} 

и пользовательское обслуживание получает Детали пользователя по номеру и вводятся в поставщик Идента выше:

public class UserLoginService implements UserDetailsService{ 

    public UserDetails loadUserByUsername(String username) 
      throws UsernameNotFoundException { 
    UserDetail ud = new UserDetail(); 
    User u = new User(); 
    ud.setUser(u); 
    u.setUsername("reza"); 
    u.setPassword("reza"); 
    u.setAccountNonExpired(true); 
    u.setAccountNonLocked(true); 
    u.setCredentialsNonExpired(true); 
    u.setEnabled(true); 
    u.setRole("ROLE_USER"); 
    return ud; 
    } 


public class UserDetail implements org.springframework.security.core.userdetails.UserDetails { 

    User user; 
    @Override 
    public Collection<? extends GrantedAuthority> getAuthorities() { 
     List<GrantedAuthority> authList = new ArrayList<GrantedAuthority>(1); 
     authList.add(new SimpleGrantedAuthority(user.getRole())); 
     return authList; 
    } 
    @Override 
    public String getPassword() { 

     return user.getPassword(); 
    } 
    @Override 
    public String getUsername() { 
     return user.getUsername(); 
    } 
    @Override 
    public boolean isAccountNonExpired() { 
     return user.isAccountNonExpired(); 
    } 
    @Override 
    public boolean isAccountNonLocked() { 
     return user.isAccountNonLocked(); 
    } 
    @Override 
    public boolean isCredentialsNonExpired() { 
     return user.isCredentialsNonExpired(); 
    } 
    @Override 
    public boolean isEnabled() { 
     return user.isEnabled(); 
    } 
    public User getUser() { 
     return user; 
    } 
    public void setUser(User user) { 
     this.user = user; 
    } 
} 
+0

Вам действительно нужно добавить код для вашего провайдера проверки подлинности и UserDetailsService. –

+0

опубликуйте свой полный UserLoginService – dhamibirendra

+0

Я переписал метод аутентификации у поставщика auth и назвал super.authenticate(), и он сработал. Но мне этот шаг кажется ненужным ... – reza

ответ

0

Я переписал метод проверки подлинности в поставщике Идента и названный super.authenticate(), и она работала.

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