繁体   English   中英

Spring Boot和安全性:如何扩展302状态代码的响应?

[英]Spring Boot and security: How to extend response for 302 status code?

设定:

  • Spring Boot应用程序
  • OAuth2安全性
  • ReactJS用于UI实现

用例:

  • 登录到应用程序
  • 在同一浏览器中使用同一应用程序打开其他选项卡
  • 在选项卡之一中从应用程序注销,用户将重定向到“登录”视图
  • 转到第一个选项卡(用户已经注销,如果刷新页面,我将获得登录表单),然后执行任何触发POST / PUT / PATCH请求的操作。 以下请求和响应的示例:

请求:

Request URL:http://localhost:8080/api/info
Request Method:PUT
Status Code:302 Found
Remote Address:[::1]:8080
Referrer Policy:no-referrer-when-downgrade
accept:application/json
Accept-Encoding:gzip, deflate, br
Accept-Language:en-US,en;q=0.8,sv;q=0.6,ru;q=0.4,uk;q=0.2,fr;q=0.2
Cache-Control:no-cache
Connection:keep-alive
Content-Length:66
Content-Type:application/json
Cookie:_ga=GA1.1.1868465923.1505828166; _gid=GA1.1.612220229.1507272075; session=e4oSW4Kq; prod_user_session=4d6b615f-521704; user_session=g3ggLxJDomyZ
Host:localhost:8080
mode:cors
Origin:http://localhost:8080
Pragma:no-cache
Referer:http://localhost:8080/profile
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36

响应:

Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Connection:keep-alive
Content-Length:0
Date:Fri, 06 Oct 2017 12:12:26 GMT
Expires:0
Location:http://localhost:8080/login
Pragma:no-cache
X-Content-Type-Options:nosniff
X-Frame-Options:DENY
X-XSS-Protection:1; mode=block

此响应系统触发PUT请求到http://localhost:8080/login并失败后,因为http://localhost:8080/login请求不允许使用PUT方法。

题:

我知道我已经注销,所以我得到302状态和Location:http://localhost:8080/login标头。 对于这种情况,我想使用JSON主体扩展响应,或者至少确保对于这种情况,我将获得401 Unauthorised状态码,而不是302。

如果我正确理解了您的问题,听起来您需要通过正常的网页加载( produces="text/html" )和AJAX调用( produces="application/json" )来的未授权请求,需要两种不同的响应。 当前,您未经授权的AJAX呼叫将重定向到登录页面(这是合法页面),因此没有401响应代码。 这是一个使用XML配置完成您想要的设置的示例, Spring Security Ajax登录和@Configuration配置https://stackoverflow.com/a/27300215/1718213

更加用户友好的另一个选项是使用Spring的WebSocket支持,将注销事件发信号通知给给定用户可能已经打开的所有选项卡(在所有设备和浏览器上),从而触发每个选项卡重定向到登录页面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM