如何使用Ext.Ajax登录spring security?
发布时间:2020-12-16 02:48:57 所属栏目:百科 来源:网络整理
导读:我正在使用Extjs-6和 Spring 4开发一个应用程序.我的应用程序很安静. 我启用CORS Origin如下: public class CorsFilter extends OncePerRequestFilter { private static final String ORIGIN = "Origin"; @Override protected void doFilterInternal(HttpSe
我正在使用Extjs-6和
Spring 4开发一个应用程序.我的应用程序很安静.
我启用CORS Origin如下: public class CorsFilter extends OncePerRequestFilter { private static final String ORIGIN = "Origin"; @Override protected void doFilterInternal(HttpServletRequest request,HttpServletResponse response,FilterChain filterChain) throws ServletException,IOException { response.addHeader("Access-Control-Allow-Origin","*"); response.setHeader("Access-Control-Allow-Credentials","true"); response.addHeader("Access-Control-Max-Age","10"); String reqHead = request.getHeader("Access-Control-Request-Headers"); if (!StringUtils.isEmpty(reqHead)) { response.addHeader("Access-Control-Allow-Headers",reqHead); } if (request.getMethod().equals("OPTIONS")) { try { response.getWriter().print("OK"); response.getWriter().flush(); } catch (IOException e) { e.printStackTrace(); } } else{ filterChain.doFilter(request,response); } } } 过滤配置: <security:http use-expressions="true"> ... <sec:custom-filter ref="CorsFilter" before="HEADERS_FILTER"/> </security:http> 和豆: <bean id="CorsFilter" class="..." /> 我希望用户使用AJAX请求进行登录.我使用Advanced REST client和http requester测试ajax请求.扩展的结果如下: Ext Ajax请求代码如下: Ext.Ajax.request({ url: "http://localhost/Calk/j_spring_security_check",// params: { // "j_username": "ali",// "j_password": "123456" // },params: "j_username=ali&j_password=123456",headers: { "Content-Type": "application/x-www-form-urlencoded" },method: "POST",success: function(){...},failure: function(){...} }); 当我发送请求时,它得到200 OK,我在客户端初始化应用程序,并发送一些请求来获取一些数据.但所有这些请求的服务器获得401 Unauthorized. 有什么问题? 重要更新: 登录请求如下: 服务器设置cookie作为响应,获取授权数据请求如下: 为什么? 解决方法
Spring Security的工作原理如下:
如果来自客户端的任何请求没有JSessionID cookie,Spring将重置该客户端的会话并为其设置无效会话.然后,下一个请求将与该无效会话一起发送. 因此,您需要在所有Ext ajax请求中设置cookie.我想一些并发的ajax请求不会发送cookie. Ext.Ajax.on("beforerequest",function(con){ con.setUseDefaultXhrHeader(false); con.setWithCredentials(true); } 此函数在发送所有ajax请求之前运行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- PostgreSQL 多行变一行
- Acitivity.xml
- dojo小例子(8)ValidationTextBox密码校验,两次输入一致性
- RubyGems Cygwin:ruby.exe找不到POSIX路径
- objective-c – 将Facebook集成到Xcode 4.3
- 在rails 3.2中默认使用postgresql并避免testunit的方法?
- 正则表达式生成器
- 10g新特性,flashback系列之一 —— flashback database
- Swift(iOS)和PHP中AES256加密的结果不同
- reactjs – React.js / Redux:Reducers中的setInterval和c