2017-10-06 149 views
0

设置:Spring Boot and security:如何扩展302状态码的响应?

  • 春季启动应用程序
  • 的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和失败,因为PUT方法不允许http://localhost:8080/login请求。

问:

我明白,我得到302个状态和Location:http://localhost:8080/login头,因为我已经注销。我想扩展这种情况与JSON身体的反应,或至少确保这种情况下,我将得到401 Unauthorised状态代码,而不是302.

回答

1

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

另一种选择是更加人性化的是使用Spring的WebSocket的支持信号注销事件给所有的标签给定的用户是什么可能已打开(跨所有设备和浏览器),这会触发每个选项卡重定向到登录页面。

相关问题