我在模态窗口中有登录表单。登录成功后,用户将被重定向到/
页面。我正在尝试找到一种方法,以便在登录后留在联系页面或其他页面上。这该怎么做?我的代码是:
@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("/");
}
答案 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路线(扩展SavedRequestAwareAuthenticationSuccessHandler
或SimpleUrlAuthenticationSuccessHandler
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()