2017-03-27 9 views
0

funktioniert Ich Spring4 lerne von .Und jetzt lesen, ich habe ein Problem über das Frühjahr Security.When traf ich „/ home“ beantragen, erhalte ich die Login-Seite, aber wenn ich die füllen formuliere und sende es, ich kann nicht in den UserDetailsService gehen, sondern gehe direkt zum Controller und dann zurück zur Login Seite. Ich debugge es und finde, dass der spitterUserDetailsService nicht null ist, es ist autowired.So weiß ich nicht what't das Problem. Hier ist mein code.Thanks im Voraus.UserServiceDetails von Spring Security nicht

@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 


    @Autowired 
    private UserDetailsService spitterUserDetailsService; 

    @Override 
    protected void configure(HttpSecurity http) throws Exception{ 
     http.formLogin().loginPage("/spitter/login").permitAll() 
      .and().rememberMe() 
      .and().authorizeRequests().antMatchers("/spitter/home").hasRole("SPITTER") 
      .anyRequest().permitAll(); 
    } 

    @Override 
    protected void configure(AuthenticationManagerBuilder auth) throws Exception{ 
     auth.userDetailsService(spitterUserDetailsService); 
    } 

} 



@Service 
public class SpitterUserDetailsService implements UserDetailsService { 

    @Autowired 
    private SpitterRepository spitterRepository; 

    @Override 
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 
     System.err.println("---------- User Details Service start -----------"); 
     Spitter spitter = spitterRepository.findByUsername(username); 
     if(spitter == null){ 
      throw new UsernameNotFoundException(username + " not found "); 
     } 
     List<SimpleGrantedAuthority> authorities = new ArrayList<SimpleGrantedAuthority>(); 
     authorities.add(new SimpleGrantedAuthority("ROLE_SPITTER")); 
     System.out.println(spitter.getUsername() + " : ROLE_SPITTER"); 
     return new User(spitter.getUsername(), spitter.getPassword(), authorities); 
    } 

} 



@Controller 
@RequestMapping("/spitter") 
public class SpitterController { 

    @Autowired 
    private SpitterRepository spitterRepository; 

    @RequestMapping(value= "/login", method = RequestMethod.GET) 
    public String login(Model model){ 
     model.addAttribute("spitter", new Spitter()); 
     return "spitter/login"; 
    } 

    @RequestMapping(value= "/loginForm", method = RequestMethod.POST) 
    public String login(@ModelAttribute("spitter") Spitter spitter){ 
     System.out.println(spitter.getUsername() + " logined.."); 
     return "redirect:home"; 
    } 

    @RequestMapping(value = "/register", method = RequestMethod.GET) 
    public String showRegistrationForm(Model model){ 
     model.addAttribute("spitter", new Spitter()); 
     return "spitter/registerForm"; 
    } 

    @RequestMapping(value="/register", method = RequestMethod.POST) 
    public String register(@ModelAttribute("spitter") Spitter spitter){ 
     spitterRepository.addSpitter(spitter); 
     return "spitter/registerSuccessfully"; 
    } 

    @RequestMapping("/home") 
    public String hello(){ 
     return "spitter/helloWorld"; 
    } 
} 
+0

Hier ist meine Github url: https://github.com/CherryYu/SpringHibernate.git –

+1

Welche ist das, was Sie Frühjahr zu tun erzählt. Ihre Form ist Entsendung an die Steuerung direkt und mit dieser Umgehung Spring Security ... –

+0

ich das configure in der WebSecurityConfigurerAdapter außer Kraft setzen und definieren einige rules.I weiß nicht, warum meine Form Posting an die Steuerung direkt ... Ich will nur Wenn ich "/ home" anfordere, kann ich die Rolle des Benutzers anhand von UserDetailsService überprüfen. –

Antwort

-1

dort ist Ihr Fix. Ersetzen Sie in Ihrer SecurityConfig.configure-Methode "/ spitter/home" durch "/ *". du brauchst eine Federsicherung, um alle Anfragen mit Ausnahme von "/ spitter/login" abzufangen.