我们有一个spring boot应用程序配置为oauth2客户机。有时候,有些人的浏览器会向应用程序发送这样的请求:
https://app/login?code=XXX&state=ZZZ
代码和状态是从以前的身份验证尝试中缓存的,现在无效。
Spring security发现这个人没有经过身份验证,所以它将他们重定向到/login,然后由它执行整个oauth2身份验证,但是在他们通过身份验证之后,spring security会将他们发送回/login?code=XXX&state=ZZZ,因为这是他们最初的请求。当发生这种情况时,它会尝试验证代码和状态,但失败了,并将它们发送到错误页面。在支持应用程序时,这是一个问题,因为用户是经过身份验证的。
有没有办法改变存储初始请求的逻辑,这样如果是/login,我们就可以用/代替它?也许我们还没有想过其他的解决方案。任何帮助都将不胜感激。
我们的应用程序目前使用的是Spring boot2,但我已经在最新版本的Spring boot3上尝试过了,这仍然是一个问题。我们一直无法改变浏览器的行为,所以如果可能的话,我们想在服务器上解决这个问题。
下面是我们的配置:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/**")
.authorizeRequests()
.antMatchers("/info", "/static/**").permitAll()
.anyRequest().authenticated().and()
.csrf();
}发布于 2020-07-18 01:07:22
如果我没理解错的话,你只想避免重定向(所以SpringSecurity的defaultSuccessUrl不是一个选项)。
如果是这样,您可以像这样实现您自己的AuthenricationSuccessHandler:
...
.successHandler(
(request, response, authentication) -> {
if (request.getRequestURI().equals("/your/invalid/path"))
response.sendRedirect("/");
}
...https://stackoverflow.com/questions/62956422
复制相似问题