基于Springmvc的登录权限拦截器
来源:互联网 发布:矩阵的秩与迹有关系吗 编辑:程序博客网 时间:2024/06/11 05:39
1.什么是拦截器
拦截器是指通过统一拦截从浏览器发往服务端的请求来完成功能的增强。
使用场景:解决请求的共性问题(如:乱码问题,权限验证问题等)
2.拦截器的基本工作原理
springmvc可以通过配置过滤器来解决乱码问题
拦截器的工作原理和过滤器非常相似
3.实现拦截器
(1)编写拦截器类实现HandlerInterceptor接口
(2)将拦截器注册进Springmvc框架中
4.拦截器的方法介绍
(1)preHandle方法,在请求被处理之前进行调用(返回值:表示我们是否需要将当前的请求拦截下来,返回
false,请求被终止,返回true,将继续运行,object arg2 表示的是被拦截的请求的目标对象)
(2)postHandle方法,在请求被处理之后调用(可以通过ModelAndView参数来修改显示的视图,或修改发往
视图的方法)
(3)afterCompletion,在请求结束之后才进行调用(做资源的销毁)
5.拦截器的其他实现方式
(1)拦截器的类还可以通过实现WebRequestInterceptor接口来编写
(2)想springmvc框架注册的写法不变
(3)弊端:preHandle方法没有返回值,不能终止请求
6.拦截器和过滤器的区别:
(1)过滤器依赖于Servlet容器,基于回调函数,过滤的范围大
(2)拦截器依赖于框架容器,基于反射机制,只过滤请求
7.总结:
(1)拦截器可以处理Web应用中请求的一些通用性问题
(2)共性问题在拦截器中处理,可以减少重复代码,便于维护
下面,我们就写一段实现登陆权限拦截器的代码吧!
一·编写一个继承HandlerInterceptorAdapter的类
package com.xinrui.hospital.action.interceptor;import java.util.Set;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.collections.CollectionUtils;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import com.xinrui.hospital.bean.Admin;import com.xinrui.hospital.util.AdminUtil;/** * * @ClassName: LoginInterceptor * @Description: 登陆拦截器 * @author 梁志成 * @date 2016年3月27日 下午4:51:53 * */public class LoginInterceptor extends HandlerInterceptorAdapter { // 排除的路径 private Set<String> excludeUrl; // 包含的路径 private Set<String> includeUrl; @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { boolean flag = false; // 获取当前url String url = request.getRequestURI().toString(); String loginUrl = request.getSession().getServletContext() .getContextPath() + "/"; // 以工程名加+"/"结尾的也是登陆请求 if (url.endsWith(loginUrl)) { return true; } // 判断当前路径是否包含在拦截器中 flag = is_include(includeUrl, url); // 包含在拦截器中,再判断是否属于被排除的系列 if (flag) { flag = false; flag = is_include(excludeUrl, url); } else { flag = true; } // 需要被拦截 if (!flag) { // 判断当前用户是否存在 Admin admin = AdminUtil.getCurrentAdmin(); if (admin != null) { flag = true; } else { response.sendRedirect("login.html"); } } return flag; } /** * @Title: is_include * @Description: 查询是否包含在拦截器中 * @param @param sets * @param @param url * @param @return * @return boolean */ private boolean is_include(Set<String> sets, String url) { boolean is_include = false; if (CollectionUtils.isNotEmpty(sets)) { for (String s : sets) { if (url.contains(s)) { is_include = true; break; } } } return is_include; } public Set<String> getExcludeUrl() { return excludeUrl; } public void setExcludeUrl(Set<String> excludeUrl) { this.excludeUrl = excludeUrl; } public Set<String> getIncludeUrl() { return includeUrl; } public void setIncludeUrl(Set<String> includeUrl) { this.includeUrl = includeUrl; }}
二·在springmvc的配置文件中注册改拦截器
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/*" /> <bean class="com.xinrui.hospital.action.interceptor.LoginInterceptor"> <property name="excludeUrl"> <!-- 登陆请求排除 --> <set> <value>/login.</value> <value>/loginOn.</value> <value>/captcha-image.</value> </set> </property> <property name="includeUrl"> <set> <value>.jsp</value> <value>.do</value> <value>.html</value> </set> </property> </bean> </mvc:interceptor> </mvc:interceptors>
三·编写一个获取当前用户的工具类
package com.xinrui.hospital.util;import javax.servlet.http.HttpServletRequest;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import com.xinrui.hospital.bean.Admin;/** * * @ClassName: AdminUtil * @Description: 获取当前登录用户 * @author 梁志成 * @date 2016年3月27日 下午6:49:46 * */public class AdminUtil { public static Admin getCurrentAdmin() { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder .getRequestAttributes()).getRequest(); return (Admin) request.getSession().getAttribute(Constants.ADMIN); }}
好了,这样就可以实现登录权限拦截了,是不是很方便快捷啊。
- 基于Springmvc的登录权限拦截器
- 基于SpringMVC的登录拦截器
- 基于SpringMVC的登录拦截器
- 基于springmvc拦截器得权限控制
- SpringMVC用户登录session权限拦截器代码片段分享
- springmvc登录拦截器
- SpringMVC登录拦截器
- 简单的springmvc登录验证拦截器
- 简单的springMVC登录拦截器
- springmvc登录拦截器的实现
- 基于SSH实现员工管理系统登录权限的过滤器与拦截器的综合使用
- springmvc 自定义拦截器实现未登录用户的拦截
- 基于Struts2拦截器的权限控制
- 基于拦截器的权限管理
- 基于struts拦截器的登录验证
- SpringMVC 登录拦截器实现
- springMVC 拦截器 登录管理
- SpringMvc拦截器登录处理
- 光端机和光纤收发器的区别
- Android应用进程间通信之Messenger信使使用及源码浅析
- 大数据量分页存储过程效率测试附测试代码与结果
- HDU 4764 博弈
- 连接远程服务器MySQL数据库,傻瓜式解决1045错误
- 基于Springmvc的登录权限拦截器
- 莫比乌斯3题小结 hdu4746,1695 && poj2154
- [CortexM3--CC26XX]UARTs
- 移动开发android自动登录+验证码+随机码的逻辑实现
- JavaEE_Servlet的页面跳转 和 参数的传递
- Linux群集LVS简介
- 动态规划回顾(1):最大连续子序列和
- Unity 转 IOS 工程报错:EXC_BAD_ACCESS
- 以前的东西整理(3)