登陆拦截拦截ajax,过滤器实现登录拦截需要注意的问题(AJAX请求的处理)

1.问题描述:

最近自己在写demo时遇到一个问题,在ajax请求时用Filter做登录拦截,结果页面不跳转(Ajax是不能做转发和重定向的)、、、、

最终的最终在同事zt的提示下,恍然大悟,虽然很基本的问题,但也纠结了好久,只能说太菜,记录下来,以免以后再犯。

2.解决办法:

在doFilter方法中判断是否为Ajax请求,做进一步处理

代码如下:

/**

* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)

*/

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {

HttpServletResponse resp=(HttpServletResponse) response;

HttpServletRequest req=(HttpServletRequest) request;

String url = req.getRequestURI();

System.out.println(url);

HttpSession session = ((HttpServletRequest) request).getSession();

String path = req.getContextPath();

String basePath= req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+path+"/";

basePath=basePath+"rest/userManager/loginOut";

try {

// 过滤掉登陆和退出请求

if ((url.indexOf("/ddoa/rest/userManager/login") >= 0)|| (url.indexOf("/ddoa/rest/userManager/loginOut") >= 0)) {

chain.doFilter(request, response);

} else {

if (null != session) {

Map map = (Map) session.getAttribute("userMap");

if(null!=map){

chain.doFilter(request, response);

}else{

//1:判断是否是ajax请求

if (req.getHeader("x-requested-with") != null&& "XMLHttpRequest".equalsIgnoreCase(req.getHeader("x-requested-with"))) {

//向http头添加 状态 sessionstatus

resp.setHeader("sessionstatus","timeout");

resp.setStatus(403);

//向http头添加登录的url

resp.addHeader("loginPath", basePath);

chain.doFilter(request, response);

return ;

}else{

resp.sendRedirect(basePath);

}

}

} else {

//1:判断是否是ajax请求

if (req.getHeader("x-requested-with") != null&& "XMLHttpRequest".equalsIgnoreCase(req.getHeader("x-requested-with"))) {

//向http头添加 状态 sessionstatus

resp.setHeader("sessionstatus","timeout");

resp.setStatus(403);

//向http头添加登录的url

resp.addHeader("loginPath", basePath);

chain.doFilter(request, response);

return ;

}else{

resp.sendRedirect(basePath);

}

}

}

} catch (IOException | ServletException e) {

e.printStackTrace();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值