2016-07-11 5 views
0

ich diesen SpringSecurity ConfigUserDetailsService wird nie (Frühjahr Boot-Sicherheit) genannt

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(securedEnabled = true) 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private UserDetailsServiceImpl detailsService; 

    @Autowired 
    public void registerGlobalAuthentication(AuthenticationManagerBuilder auth) throws Exception { 
     auth.userDetailsService(detailsService); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests() 
       .antMatchers("/", "/index").access("hasRole('USER')"); 
     http.userDetailsService(detailsService); 
    } 
} 

wenn ich öffnen index.html Seite bekomme ich 403-Fehler haben. Es ist, weil Benutzer anonymous ist. Aber ich möchte Benutzer überprüfen und Rollen und Details festlegen, bevor diese Seite geöffnet wird. Dazu schreibe ich diesen Service

@Service 
public class UserDetailsServiceImpl implements UserDetailsService { 
    @Autowired 
    private HttpServletRequest request; 
    @Autowired 
    AuthService authService; 
    @Override 
    public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException { 
     String ipAddress = request.getRemoteAddr(); 
     AuthLkUser authLkUserByIp = authService.getAuthLkUserByIp(ipAddress); 

     if (authLkUserByIp == null) return null; 

     boolean b = authService.checkAuthLkUser(authLkUserByIp); 
     if (b) return null; 
     Set<GrantedAuthority> roles = new HashSet(); 
     roles.add(new SimpleGrantedAuthority("USER")); 
     UserDetails userDetails = new org.springframework.security.core.userdetails.User(authLkUserByIp.getMsisdn(), 
         authLkUserByIp.getSubsId(), roles); 
     return userDetails; 
    } 
} 

Aber dieser Service wird nie aufgerufen.

Antwort

0

Wenn Sie im Spring Boot eine benutzerdefinierte Spring Security-Konfiguration haben, wird die automatische Konfiguration für Spring Security nicht verwendet.

In Ihrer Spring-Sicherheitskonfiguration haben Sie nicht angegeben, einen Benutzer zu authentifizieren. Es gibt formularbasierte, basiskopfbasierte, usw. Authentifizierung, die in Spring Security verfügbar ist. Sie sollten einen davon verwenden, um den Benutzer zu authentifizieren, damit während der Authentifizierung Ihr UserDetailsServiceImpl zum Laden des Benutzers verwendet wird.

Folgen Sie dieser post für Formular basierte Login