> 文章列表 > spring security 的AuthenticationSuccessHandler 没有调用 ,无法生效

spring security 的AuthenticationSuccessHandler 没有调用 ,无法生效

spring security 的AuthenticationSuccessHandler 没有调用 ,无法生效

今天想不明白,我控制层写了一个登录的接口。结果验证成功了,我发现AuthenticationSuccessHandler 没有调用 ,而且也不生效啊,最后研究终于发现是因为我们需要配置登录的url 这个url 我们访问,中间的什么控制器什么的框架有自己的处理,我们访问这个url ,框架自动调用认证,认证成功才走这个成功接口类,中间失败就走失败的接口类。异常走对应的异常接口类。

 

解决方法

  • loginPage("/login/page") 方法指定了登录页面的 URL。在这个例子中,登录页面的 URL 是 "/login/page"。

  • loginProcessingUrl("/login") 方法指定了处理登录表单提交的 URL,也就是提交用户名和密码的表单被提交到哪个 URL。在这个例子中,登录表单的提交 URL 是 "/login"。

  • 当我们访问/login 必须用post 方法访问,而且还要代码认证所需要的字段(你自己的认证方法),框架自动用你提交的参数去认证,认证成功才会走后面是sucessHandler 的方法

  
//loginPage("/login/page") 方法指定了登录页面的 URL。在这个例子中,登录页面的 URL 是 "/login/page"。//loginProcessingUrl("/login") 方法指定了处理登录表单提交的 URL,也就是提交用户名和密码的表单被提交到哪个 URL。在这个例子中,登录表单的提交 URL 是 "/login"。
http.formLogin().loginPage("/login/page").loginProcessingUrl("/login").successHandler(authSucessHandler).failureHandler(authFailureHandler);

 

如果同时控制器也有一个/login的post 请求的方法,那么会用框架自己的验证,走sucesshandler的处理器,不走我们的控制器。

至于第一个/login/page这个是一个页面的url 我的是前后端分离项目,我不知道要还是要的好,我不知道

重要:

破案了!!!不好意思各位,这个重要是我第二层修改文章,那个login方法填写的url 默认就自带/login  如果不写,默认是/login 但是你还是要用post发生请求,而且默认是从表单里面获取用户名和密码 而且,那个字段用户名还必须是username 密码必须是password,如果不是,框架无法识别,我之前可能是因为我没有选择post吧,导致我以为失效了。接口不能用