三.SSM框架整合之过滤器Filter与拦截器Interceptor(登陆拦截)
2020-03-06 21:16
267 查看
过滤器:Filter
拦截器:Interceptor
过滤器与拦截器的区别:
1 拦截器(interceptor)只对action请求起作用,而过滤器(filter)则可以对几乎所有的请求起作用
2 过滤器是在请求进入容器(Tomcat)之后,但是请求进入Servlet之前。请求结束返回时也是,是在Servlet处理完之后,返回给前端之前
做一个登陆的拦截
创建类
package com.gm.interceptor; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * @author 起风 * @date 2020/3/2 9:51 */ public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //在拦截点执行拦截,如果返回的true则不执行拦截点后的操作(拦截成功) // 1 判断当前的user用户不为空 获取当前的登陆方法 HttpSession session = request.getSession(); String url = request.getRequestURI(); System.out.println("接收到的action为:" + url); if (session.getAttribute("userInfo") != null || url.indexOf("user/doLogin.do") != -1) { //用户不为空,路径下标不为-1 不进行拦截 return true; } else { //进行拦截,返回登陆页面 response.sendRedirect(request.getContextPath() + "/user/doLogin.do"); return false; } } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { //在处理过程中,执行拦截 } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
去spring-mvc.xml 添加拦截器的配置
<!-- 4 配置拦截器--> <mvc:interceptors> <mvc:interceptor> <!-- 拦截所有的mvc控制器--> <mvc:mapping path="/**"/> <!--放行机制,可以测试/指定对某一页面进行拦截--> <mvc:exclude-mapping path="/user/doLogin.do"/> <!--指定用那个拦截器--> <bean class="com.gm.interceptor.LoginInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
测试
在页面中,未登陆,不可以直接进行路径的访问
登陆了 随意
过滤器实现
package com.gm.filter; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; /** * @author 陈琳 * @date 2020/3/2 10:28 */ public class LoginFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { //过滤器出生 } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { //servletRequest 是个接口,HttpServletRequest 是实现,但是有些方法是HttpServletRequest独有的,如:getSession //HttpServletRequest接口是继承servletRequest接口,增加了和http相关的方法 // 强转得到想要的request和response HttpServletRequest request= (HttpServletRequest) servletRequest; HttpServletResponse response= (HttpServletResponse) servletResponse; /*获取session*/ HttpSession session=request.getSession(); if (session.getAttribute("userinfo")==null &&request.getRequestURI().indexOf("/user/doLogin.do")==-1){ /*没有登陆*/ response.sendRedirect(request.getContextPath()+"/user/doLogin.do"); }else { //登陆了,继续请求,不进行过滤操作 filterChain.doFilter(request,response); } } @Override public void destroy() { //过滤器死亡 } }
去web.xml添加配置
<!--使用filter 实现登陆控制--> <filter> <filter-name>SessionFilter</filter-name> <filter-class>com.gm.filter.LoginFilter</filter-class> </filter> <filter-mapping> <filter-name>SessionFilter</filter-name> <!--拦截所有的页面 (自定义)--> <url-pattern>/pages/*</url-pattern> <url-pattern>*.jsp</url-pattern> <url-pattern>/css/*</url-pattern> <url-pattern>/img/*</url-pattern> </filter-mapping>
测试,搞定
AOP:
拦截器和过滤器其实都是aop编程思想的实现,都可以提现权限检查,日志记录;但是不同之处:
1 适用范围不同:filter是Servlet规定规范规定的,只能用于web程序中,而拦截器既可以用于web中,也可以用于Application,Swing程序中
2 规范不同: filter是Servlet规定规范规定的,是Servlet容器支持的。拦截器是在Spring容器内的,是Spring框架支持的
3 使用资源不同
4 深度不同
在校大二学生,疫情在家学习网课,来此记录,有错请点出,谢谢。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 过滤器(opensessioninviewfilter)与拦截器(opensessioninviewinterceptor)的区别?
- struts2 角色权限 filter(过滤器)和interceptor(拦截器)
- Filter(过滤器)与Interceptor(拦截器)的区别
- ssh框架做登陆拦截的时候,页面不经过action直接访问jsp页面使用拦截器无法拦截,我使用servlet的过滤器过滤
- 过滤器和拦截器filter和Interceptor的区别
- Servlet 过滤器(filter)和Spring 拦截器(Interceptor)区别
- 过滤器(Filter)与拦截器(Interceptor )
- 过滤器(Interceptor)和拦截器(Filter)的区别:
- 拦截器(Interceptor)和过滤器(Filter)的执行顺序和区别
- 过滤器(Filter)和SpringMVC中的拦截器(Interceptor)
- 过滤器(Filter)、拦截器(Interceptor)、监听器(Listener)
- struts2的拦截器(Interceptor)与过滤器(Filter)
- 拦截器(Interceptor)与过滤器(Filter)的区别与使用
- struts2 角色权限 filter(过滤器)和interceptor(拦截器)
- 过滤器(opensessioninviewfilter)与拦截器(opensessioninviewinterceptor)
- java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例
- 拦截器Interceptor 与过滤器 Filter
- Spring boot实战:拦截器interceptor与过滤器Filter
- SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系
- Struts2 拦截器(Interceptor )原理和配置 (区别 过滤器Filter)