最近在开发时遇到一点小问题:在退出CAS登录后重新登录以后,没有跳转到指定的登入页面,而是返回了一个json的API
报文格式如下:
Request URL:http://127.0.0.1:8080/XXXXX/j_spring_cas_security_check?ticket=XXXXXXXXXXXX.example.org
Response Headers
view source
Content-Length:0
Date:Thu, 05 Nov 2015 03:03:33 GMT
Location:http://127.0.0.1:8080/XXXXX/api/xxx/xxx?xxx=30&xxx=out
就是我登录成功以后,那着ticket去访问,结果返回了一个API的response,然后到filter里面一点点打断点差,有response肯定有request存在,后来发现的确有request,且种类是defaultsavedrequest,最终查到这个request是上次登出由(定时器)之前发出。
复现:
清空缓存(ticket)--定时器发出请求--CAS返回重定向--url输入重新登录
此时第二步发出的请求被CAS缓存,要我们重定向,但是我们又重新再url输入地址,发出请求。认证通过后CAS放行的是前面的请求,导致我们请求index.html的request发出去,
却的到一个API的response。
解决办法:
尝试在CAS,或者filter改进,没有能找到适应性较好的方法,都是针对这个API的种类以及请求资源做抛出,遂放弃。改为在前端定时器请求的时候加上本地cookie是否有ticket的判断。防止冗余请求的发出