基于 Spring MVC Java 的配置中的 AuthenticationSuccessHandler

Posted

技术标签:

【中文标题】基于 Spring MVC Java 的配置中的 AuthenticationSuccessHandler【英文标题】:AuthenticationSuccessHandler in Spring MVC Java based configuration 【发布时间】:2015-05-09 12:05:41 【问题描述】:

我有三个角色,我想根据用户的角色在登录后将用户重定向到不同的页面。我知道这可以通过 AuthenticationSuccessHandler 完成,但我在基于 Java 的配置中声明它时遇到了麻烦。

到目前为止,我已经做到了。

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 以及如何在这个类中自动装配它,或者如何在这个类中声明 successHandler 方法并使用它。

【问题讨论】:

下面的答案有用吗? 感谢您的回答。实际上,老实说,我在项目中遇到了其他一些困难,所以我全神贯注于解决它们。我会尽快检查这个配置。如果发现任何无法解决的问题,肯定会寻求帮助。这看起来确实很简单,一旦我实施它,我肯定会将您的答案标记为已解决。谢谢。 它工作正常。只需要很少的自定义修改。谢谢你的回答 【参考方案1】:

试试这个: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

【讨论】:

以上是关于基于 Spring MVC Java 的配置中的 AuthenticationSuccessHandler的主要内容,如果未能解决你的问题,请参考以下文章

基于 Spring mvc Java 的配置不起作用。控制台显示没有错误但我的jsp页面没有显示

Java EE - Servlet 3.0 和 Spring MVC

java.lang.NullPointerException Spring Mvc

基于注解的Spring MVC(所需jar包,web.xml配置,Spring文件配置,@Controller,@RequestMapping,@RequestParam,model填參,EL取值)

Spring+Spring mvc+Mybatis整合教程(基于Maven)

Spring MVC XML 的配置