2015-03-08 3 views
2

У меня три роли, и я хочу перенаправить пользователя на разные страницы после входа в систему в соответствии с их ролями. Я знаю, что это может быть сделано с помощью AuthenticationSuccessHandler, но у меня возникли проблемы с объявлением его в java-конфигурации. Пока я это сделал.AuthenticationSuccessHandler в конфигурации java на основе mvc весны

protected void configure(HttpSecurity http) throws Exception { 

    http 
    .authorizeRequests()                 
    .antMatchers("/resources/**", "/login").permitAll()     
    .antMatchers("/admin/**").hasRole("USER")       
    .and() 

    .formLogin() 
     .loginPage("/login") 
     .defaultSuccessUrl("/") 
     .successHandler(successHandler) //----- to handle user role 
     .failureUrl("/loginfailed")    
     .permitAll() 
     .and() 

    .logout() 
     .logoutRequestMatcher(new AntPathRequestMatcher("/logout")) 
     .deleteCookies("JSESSIONID") 
     .invalidateHttpSession(true) 
     .and();      
} 

Мой вопрос, где объявить successHandler и как autowire его в этом классе, или как объявить метод successHandler в этом классе и использовать его.

+0

ответил ли ниже ответ? –

+0

Благодарим вас за ответ. На самом деле, если честно, у меня возникают другие трудности с проектом, поэтому я был озабочен их решением. Я проверю эту конфигурацию, как только смогу. И обязательно спросите о помощи, если найдете какую-либо неразрешимую проблему. Это выглядит просто и, безусловно, я отвечу на ваш ответ, как только я его реализую. Спасибо . – Kharoud

+0

Он отлично работает. Необходима небольшая индивидуальная модификация. Спасибо за ответ – Kharoud

ответ

9

Попробуйте это: Moving Spring Security To Java Config, where does authentication-success-handler-ref go?

код с поста выше:

@Override 
protected void configure(HttpSecurity http) throws Exception { 
http 
    .authorizeRequests() 
     .anyRequest().authenticated() 
     .and() 
    .formLogin() 
     .loginPage("") 
     .defaultSuccessUrl("/") 
     .failureUrl("") 
     .successHandler(//declare your bean here) 
     .and() 
    .logout() 
     .permitAll() 
     .and() 
    } 

Затем в обработчике аутентификации можно применить требуемую логику

public class MYSuccessHandler implements AuthenticationSuccessHandler { 


private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy(); 

@Override 
public void onAuthenticationSuccess(HttpServletRequest request, 
    HttpServletResponse response, Authentication authentication) throws IOException { 
    handle(request, response, authentication); 

} 

protected void handle(HttpServletRequest request, 
    // logic 

    redirectStrategy.sendRedirect(request, response, targetUrl); 
} 

/** Builds the target URL according to the logic defined in the main class Javadoc. */ 
protected String determineTargetUrl(Authentication authentication) { 
    } 
    } 

Учебник перечисленные здесь http://www.baeldung.com/spring_redirect_after_login

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