答:
看起来像是在认证服务过滤器链配置的http.exceptionHandling中添加了authenticationEntryPoint配置的原因,因为defaultAuthenticationEntryPointFor是在没有其它异常处理配置的情况下生效的,但是添加了authenticationEntryPoint以后该配置就不会生效了
现在配置:
http.exceptionHandling((exceptions) -> exceptions
.defaultAuthenticationEntryPointFor(
// new LoginUrlAuthenticationEntryPoint("/login"),
new LoginTargetAuthenticationEntryPoint("http://10.100.200.26:8000/login"),
new MediaTypeRequestMatcher(MediaType.TEXT_HTML)
)
.authenticationEntryPoint(new BaseAuthenticationEntryPoint())
.accessDeniedHandler(new BaseAccessDeniedHandler())
修改后:
http.exceptionHandling((exceptions) -> exceptions
.defaultAuthenticationEntryPointFor(
// new LoginUrlAuthenticationEntryPoint("/login"),
new LoginTargetAuthenticationEntryPoint("http://10.100.200.26:8000/login"),
new MediaTypeRequestMatcher(MediaType.TEXT_HTML)
)
因为未认证就是LoginTargetAuthenticationEntryPoint处理的,所以不需要再添加未认证处理了,权限不足我看你也有在http.oauth2ResourceServer中配置,所以去除了这两个的配置。
LoginTargetAuthenticationEntryPoint只是针对于未登录跳转至登录页面的处理而已,登录失败并不在该类的责任范围内,所以没必要将两者结合,一个是在未登录时跳转至登录页面,一个是在登录失败后响应json(前后端分离)或重定向至登录(前后端不分离),这是两种不同的处理。