加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使用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 clienthttp requester测试ajax请求.扩展的结果如下:

enter image description here

enter image description here

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.

有什么问题?

重要更新:

登录请求如下:

enter image description here

服务器设置cookie作为响应,获取授权数据请求如下:

enter image description here

为什么?

解决方法

Spring Security的工作原理如下:
如果来自客户端的任何请求没有JSessionID cookie,Spring将重置该客户端的会话并为其设置无效会话.然后,下一个请求将与该无效会话一起发送.

因此,您需要在所有Ext ajax请求中设置cookie.我想一些并发的ajax请求不会发送cookie.
要在所有ajax请求中设置cookie,您可以添加此事件:

Ext.Ajax.on("beforerequest",function(con){
  con.setUseDefaultXhrHeader(false);
  con.setWithCredentials(true);
}

此函数在发送所有ajax请求之前运行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读