成功登录后,Spring Boot重定向到当前页面

时间:2014-11-09 21:19:54

标签: spring spring-security spring-boot

我在模态窗口中有登录表单。登录成功后,用户将被重定向到/页面。我正在尝试找到一种方法,以便在登录后留在联系页面或其他页面上。这该怎么做?我的代码是:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
            .antMatchers("/css/**","/js/**","/fonts/**","/images/**","/home","/","/kontakt").permitAll()
            .antMatchers("/userlist").hasRole("ADMIN")
            .anyRequest().authenticated();
    http
        .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
        .logout()
            .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
            .logoutSuccessUrl("/");
}

8 个答案:

答案 0 :(得分:16)

您可以使用自定义AuthenticationSuccessHandler并将useReferer设置为true

@Bean
public AuthenticationSuccessHandler successHandler() {
    SimpleUrlAuthenticationSuccessHandler handler = new SimpleUrlAuthenticationSuccessHandler();
    handler.setUseReferer(true);
    return handler;
}

并使用configure方法:

http
    .formLogin()
        .loginPage("/login")
        .successHandler(successHandler())
        .permitAll()
        .and()

答案 1 :(得分:11)

只是提供替代解决方案:

formLogin()
    .loginPage("/login")
    .defaultSuccessUrl("/")

defaultSuccessUrl是添加自定义SuccessHandler的快捷方式。

答案 2 :(得分:3)

您也可以在AuthenticationSuccessHandler实施中执行此操作:

@Override
public void onAuthenticationSuccess(HttpServletRequest request, 
HttpServletResponse response, Authentication authentication) throws 
IOException, ServletException 
{
    //Do your logic;
    response.sendRedirect(request.getHeader("referer");
}

答案 3 :(得分:1)

我有一个奇怪的问题会导致登录时将用户重定向到localhost:8080/js/bootstrap.min.js

如果其他人在登录时遇到奇怪的重定向,这似乎会覆盖.defaultSuccessUrl(),请尝试在SecurityConfig中添加以下代码:

@Override
public void configure(WebSecurity security){
    security.ignoring().antMatchers("/css/**","/images/**","/js/**");
}

将所有Resources/static个文件夹添加到antMatchers()

答案 4 :(得分:0)

Spring路线(扩展SavedRequestAwareAuthenticationSuccessHandlerSimpleUrlAuthenticationSuccessHandler ala可能很难实现。在控制器(例如处理登录的控制器)中,您可以自己执行标头请求;例如:

HttpServletRequest request =null;

String priorUrl = request.getHeader("Referer");

您会注意到,在手动(由用户启动)注销或会话超时(由Spring会话处理)之前,您将具有URL:您将获得https://iAmPriorUrl.com/...。然后,您可以随心所欲地做任何事情。

答案 5 :(得分:0)

在向我的项目树中添加引导程序后,我遇到了同样的问题,即重定向不充分。

方法。 defaultSuccessUrl flag = true 为我节省了时间和代码行。

.formLogin()
   .loginPage("/login")
   .defaultSuccessUrl("/", true)
   .permitAll()

答案 6 :(得分:0)

Config与the accepted answer相同, 我只有运气是扩展SavedRequestAwareAuthenticationSuccessHandler

public class MyAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {
    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
                                        Authentication authentication) throws IOException, ServletException {
        System.out.println("HEP HEP");
        super.onAuthenticationSuccess(request, response, authentication);
    }
}

答案 7 :(得分:-1)

@Jonas你需要做的就是在最后添加.requestCache()

你的配置看起来像这样

         .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
        .logout()
            .permitAll()
            .and()
            .requestCache()