shiro 判断ajax是否通过身份验证
2017-09-08 14:17
295 查看
这篇文章主要是针对使用shiro后ajax请求判断是否经过验证的问题。
代码:
这里说明saveRequestAndRedirectToLogin
进入这个方法是会将当前的请求redirect到spring-shiro.xml配置中的loginUrl
代码:
public class RoleAuthorizationFilter extends AuthenticationFilter { private static int bytes = 1024; private static int startByte = 0; private static int endByte = 0; /** * shiro 授权失败会进入此方法 判断是否是ajax请求 */ @Override protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; String serlvetPath = httpRequest.getServletPath(); Subject subject = getSubject(request, response); if (subject.getPrincipal() == null) { // 这里判断是否为ajax请求且是以.do结尾的 // 如果不是会走shiro默认的权限流程 if (isAjax(httpRequest) && serlvetPath.contains(".do")) { returnJsonResult(httpResponse, "您尚未登录或登录时间过长,请重新登录!"); } else { saveRequestAndRedirectToLogin(request, response); } } return false; } private void returnJsonResult(HttpServletResponse httpResponse, String message) { httpResponse.setStatus(301); httpResponse.setHeader("Content-type", "application/json;charset=UTF-8"); Result result = new Result(); result.setCode(Const.FAIL); result.setMessage(message); Gson gson = new Gson(); String jsonStr = gson.toJson(result); try { OutputStream os = httpResponse.getOutputStream(); byte[] jsonByte = jsonStr.getBytes("UTF-8"); int count = jsonByte.length; while (count > 0) { if (count < 1024) { endByte = endByte + count; } else { endByte = endByte + bytes; } os.write(jsonByte, startByte, endByte); startByte = endByte; count = count - bytes; } } catch (Exception e) { } } /** * 判断ajax请求 * * @param request * @return */ private boolean isAjax(HttpServletRequest request) { return (request.getHeader("X-Requested-With") != null && "XMLHttpRequest".equals(request.getHeader("X-Requested-With").toString())); } }
这里说明saveRequestAndRedirectToLogin
进入这个方法是会将当前的请求redirect到spring-shiro.xml配置中的loginUrl
相关文章推荐
- 从a站点跳转到b站点,通过url的参数判断是否让该用户选择身份
- MVC中通用JS判断表单或者某个具体的文本框验证是否通过
- 从a站点跳转到b站点,通过url的参数判断是否让该用户选择身份
- Ajax实现无刷新验证用户名是否存在 (使用AjaxPro.2.dll)(当鼠标离开输入框时,即使判断用户名是否存在)
- 实现同步加载验证码和用户名是否存在的判断通过Ajax
- 为什么每个请求都要有用户名密码呢,那不是每次都要查询一下了,token,表示这个用户已经验证通过了,在token有效期内,只需要判断token是否有效就可以了
- a 标记点击后通过ajax返回的布尔值结果进行判断是否在新窗口打开链接
- bootstrapValidator代码中开启验证和判断验证是否通过
- ASP.NET MVC中通过Request.IsAjaxRequest()来判断是否要加载公共视图
- 在MVC中如何在使用 MicrosoftMvcValidation验证的前提下使用 jQuery.Ajax 提交数据的时候检查验证是否通过
- ASP.NET MVC3中通过Request.IsAjaxRequest()来判断是否要加载公共视图
- 通过Ajax实现不显示登录框的IIS-Windows集成身份验证登录
- ASP.NET MVC3中通过Request.IsAjaxRequest()来判断是否要加载公共视图
- bootstrapValidator代码中开启验证和判断验证是否通过
- Easyui 判断某个Div 里的表单项是否验证通过.
- 判断jquery.表单验证插件是否通过验证的解决办法
- Page_ClientValidate()js中判断验证控件是否通过
- 通过Ajax实现不显示登录框的IIS-Windows集成身份验证登录
- H-UI的前端处理验证,判断是否已经存在,比较健全的模板,可以自己添加一些校验
- Ajax 验证用户输入的验证码是否与随机生成的一致