2015-08-03 1 views
1

Je me demande comment je peux faire fonctionner mon "redirect:" avec Spring Security. Tous les chemins/auth * fonctionnent correctement. Mais quand il cames jusqu'à [1] il ne redirige tout simplement pas. Spring Security 4.0.2.RELEASE, Spring MVC 4.0.8.RELEASEComment autoriser la redirection vers une URL externe avec Spring Security

@Controller 
@RequestMapping(value = "/auth") 
public class SomeAuthController { 

    @RequestMapping(value = "/external") 
    public String externalAuth(...) { 
     if(someCondition) return "redirect:" + someExternalUrl; // [1] https://external-service.com 
     else return "redirect:/" 
    } 

} 



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


    @Autowired 
    public void registerGlobalAuthentication(AuthenticationManagerBuilder auth, 
              ShaPasswordEncoder shaPasswordEncoder, 
              List<AuthenticationProvider> authProviders) 
                   throws Exception { 
     for(AuthenticationProvider provider : authProviders) auth.authenticationProvider(provider); 
    } 

    @Bean(name="myAuthenticationManager") 
    @Override 
    public AuthenticationManager authenticationManagerBean() throws Exception { 
     return super.authenticationManagerBean(); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.csrf().disable().authorizeRequests().antMatchers("/resources/**").permitAll(); 

     http.authorizeRequests().antMatchers("/auth/**", "/").permitAll().anyRequest().authenticated(); 

     http.formLogin() 
       .loginPage("/auth/login") 
       .loginProcessingUrl("/j_spring_security_check") 
       .usernameParameter("j_username") 
       .passwordParameter("j_password") 
       .failureUrl("/auth/login?error") 
       .permitAll(); 

     http.logout() 
       .permitAll() 
       .logoutUrl("/auth/logout") 
       .logoutSuccessUrl("/") 
       .invalidateHttpSession(true); 
    } 


} 

Répondre

1

Bon les gars. Voici ma réponse. J'espère que ça va aider quelqu'un. La première chose à faire est d'activer JSR250 dans le bean de configuration de sécurité. Par la suite j'ai ajouté l'annotation @PermitAll pour une méthode qui contenait la redirection.

@PermitAll 
@RequestMapping(value = "/external") 
public String externalAuth(...) { 
    if(someCondition) return "redirect:" + someExternalUrl; // [1] https://external-service.com 
    else return "redirect:/" 
} 

C'est tout. Avoir un bon débogage J