2015-08-03 6 views
1

Мне интересно, как я могу сделать свою работу «redirect:» с помощью Spring Security. Все/auth * pathes работают правильно. Но когда он приписывает [1], он просто не перенаправляет. Spring Security 4.0.2.RELEASE, Spring MVC 4.0.8.RELEASEКак разрешить пересылку на внешний URL с 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); 
    } 


} 

ответ

1

Хорошо, ребята. Вот мой ответ. Надеюсь, это поможет кому-то. Первое, что нужно включить JSR250 в компоненте конфигурации безопасности.

@EnableGlobalMethodSecurity(securedEnabled = true, jsr250Enabled = true) 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

Впоследствии я добавил аннотацию @PermitAll для метода, который содержал перенаправление.

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

Это все. Хорошая отладка J

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

  • Нет связанных вопросов^_^