一、拦截器与过滤器的区别

  1、过滤器

  依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等。

  2、拦截器

  依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是能对controller请求进行拦截,可以拦截静态资源,但是拦截不了jsp页面

二、登陆拦截的实现思路

  思路:即将请求的url地址进行解析,除了登录外的请求都要进行拦截或者过滤,这些请求在通过登录的判断,来决定最后的结果

  2.1拦截器实现登陆拦截

    2.1.1创建拦截器

public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("进行拦截");
//获取请求的RUi:去除http:localhost:8080这部分剩下的
String uri = request.getRequestURI();
System.out.println(uri);
//UTL:除了login.jsp是可以公开访问的,其他的URL都进行拦截控制
if (uri.indexOf("/login") >= 0) {
System.out.println("这是登录页面");
return true;
}
//获取session
HttpSession session = request.getSession();
Users user = (Users) session.getAttribute("user");
//判断session中是否有用户数据,如果有,则返回true,继续向下执行
if (user != null) {
System.out.println("有数据"); return true;
}
//不符合条件的给出提示信息,并转发到登录页面
response.sendRedirect("login.jsp");
System.out.println("非法"); 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 { }
}

    2.1.2 配置拦截器

 <!--拦截器映射-->
<mvc:interceptors> <mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.invoicing.interceptor.LoginInterceptor"></bean> </mvc:interceptor>
</mvc:interceptors>

     2.1.3 注意:

     因为拦截器无法拦截jsp页面,所以,直接登录jsp页面无法拦截。

     将所有的jsp文件放入到WEB-INF文件夹下,这样用户是直接不能访问WEB-INF文件下的jsp文件的。spring mvc的理念也是通过controller里的@RequestMapping来请求相关jsp页面,而非用户直接访问jsp页面。

  2.2 过滤器实现

    2.2.1导入依赖:

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>

    2.2.2编写过滤器:

@WebServlet(urlPatterns = {"/*"})
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException { }
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest=(HttpServletRequest) servletRequest;
System.out.println("123");
//放行URL
if (httpServletRequest.getRequestURI().indexOf("/login") >= 0) {
filterChain.doFilter(servletRequest,servletResponse);
} Object user = httpServletRequest.getSession().getAttribute("user");
if (user==null){
httpServletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest,servletResponse);
}else {
//放行请求
filterChain.doFilter(servletRequest,servletResponse);
} } @Override
public void destroy() { }
}

SpringMVC——拦截器,过滤器实现登录拦截的更多相关文章

  1. Springboot 拦截器配置(登录拦截)

    Springboot 拦截器配置(登录拦截) 注意这里环境为springboot为2.1版本 1.编写拦截器实现类,实现接口   HandlerInterceptor, 重写里面需要的三个比较常用的方 ...

  2. SpringMVC拦截器实现用户登录拦截

    本例实现登陆时的验证拦截,采用SpringMVC拦截器来实现 当用户点击到网站主页时要进行拦截,用户登录了才能进入网站主页,否则进入登陆页面 核心代码 首先是index.jsp,显示链接 1 < ...

  3. spring boot 使用拦截器 实现 用户登录拦截

    登录拦截和和权限拦截实现类似   首先自定义一个[DefineAdapter]类,这个类我是用来放自定义的配置(比如 自定义请求参数,自定义拦截器等),集成WebMvcConfigurerAdapte ...

  4. springMVC使用拦截器检查用户登录

    参考文章 编写拦截器类 package cultivate_web.interceptor; import javax.servlet.http.HttpServletRequest; import ...

  5. struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo

    理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...

  6. spring mvc 用cookie和拦截器实现自动登录(/免登录)

    Cookie/Session机制详解:http://blog.csdn.net/fangaoxin/article/details/6952954 SpringMVC记住密码功能:http://blo ...

  7. struts2拦截器配置;拦截器栈;配置默认拦截器;拦截方法的拦截器MethodFilterInterceptor;完成登录验证

    struts2.xml 内容 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts ...

  8. 系统开发中使用拦截器校验是否登录并使用MD5对用户登录密码进行加密

    项目名称:客户管理系统 项目描述: 项目基于javaEE平台,B/S模式开发.使用Struts2.Hibernate/Spring进行项目框架搭建.使用Struts中的Action 控制器进行用户访问 ...

  9. axios token header response request http拦截器 axios实现登录、拦截、登出

    axios token header response request http拦截器 axios实现登录.拦截.登出 一个项目学会前端实现登录拦截 https://github.com/superm ...

  10. SpringBoot 增加 拦截器 判断是否登录

    1.创建拦截器 package com.example.demo.interceptor; import org.slf4j.Logger; import org.slf4j.LoggerFactor ...

随机推荐

  1. empty和isset的区别

    1.empty 判断一个变量是否为空 null.false.0.0.0.’0′.array() .' '.var $a   都会返回true. 2.isset 判断一个变量是否设置 0.00.’0′. ...

  2. 检查一个string是否包含List<string>中的任意一个

    bool b = listOfStrings.Any(s=>myString.Contains(s)); 应用在where子句中的示例: //获取路径 var groupPaths = grou ...

  3. vue-Elementui引入

    安装命令 npm install --save element-ui 可以直接复制官网的引用,复制到main.js里面:就可以忽略下面所有步骤 import Vue from 'vue'; impor ...

  4. SpringBoot之Redis访问(spring-boot-starter-data-redis)

    依赖注入: <!--dependency for redis--> <!-- https://mvnrepository.com/artifact/org.springframewo ...

  5. [react] - 循环请求 redux-saga

    //根据uuid 获取 apt报告信息 *getNotesByUid({ payload, callback }, { call, put }) { // payload 是个数组, 并发执行,参考r ...

  6. 【Log4J】

    学习mybatis中用到了Log4J 在此记录下 引入 引入Maven配置 <!-- https://mvnrepository.com/artifact/log4j/log4j --> ...

  7. Maven的下载及安装

    版权申明:本文为博主原创文章,欢迎大家转载.转载请声明转载处为:https://www.cnblogs.com/qxcxy-silence/p/10808321.html 1.下载Maven; 1). ...

  8. PXC节点启动与关闭

    PXC节点启动与关闭 最后关闭的PXC节点是安全退出时. cat /var/lib/mysql/grastate.dat,其中safe_to_bootstrap: 1,再次启动集群是则先启动该节点 s ...

  9. shell 脚本检测端口状态

    方法一: # cat check_port.sh #!/bin/bash cat ip.txt|while read line do /usr/bin/nc -w 1 -z $line > /d ...

  10. Caffe---Pycaffe 绘制loss和accuracy曲线

    Caffe---Pycaffe 绘制loss和accuracy曲线 <Caffe自带工具包---绘制loss和accuracy曲线>:可以看出使用caffe自带的工具包绘制loss曲线和a ...