springmvc中登录过滤器使用

  前言

一般的javaWeb项目中我们肯定会使用过滤器来实现对一些请求的过滤,通过过滤来实现对一些请求参数的设置和校验,比如我们比较熟悉的CharacterEncodingFilter就是一个字符编码的过滤器,小编今天就filter实现拦截登录的过程做一个简单的演示。

   预期效果

    一般当我们访问某个页面时,如果没有登录,则需要跳转到登录页面,登陆后在跳转到主页面。

实现代码

    主要通过实现Servlet的Filter接口即可,主要代码如下,其中为了防止静态资源、登录页面、登录请求被过滤拦截,可将对应的请求排除掉(具体见代码标红部分)

 1 package com.yongcheng.liuyang.filter;
 2
 3 import java.io.IOException;
 4 import java.util.ArrayList;
 5 import java.util.Arrays;
 6 import java.util.List;
 7
 8 import javax.servlet.Filter;
 9 import javax.servlet.FilterChain;
10 import javax.servlet.FilterConfig;
11 import javax.servlet.ServletException;
12 import javax.servlet.ServletRequest;
13 import javax.servlet.ServletResponse;
14 import javax.servlet.http.HttpServletRequest;
15 import javax.servlet.http.HttpServletResponse;
16 import javax.servlet.http.HttpSession;
17
18 import org.springframework.util.StringUtils;
19
20 /**
21  * 用户登录过滤器
22  *
23  *
24  *
25  * @author Administrator
26  *
27  */
28 public class UserLoginFilter implements Filter
29 {
30
31     private static List<String> urls = Arrays.asList(new String[]{"js/*","images/*","jsp/*","/doLogin","/login"});
32
33     @Override
34     public void destroy()
35     {
36
37     }
38
39     @Override
40     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
41                          FilterChain chain)
42             throws IOException, ServletException
43     {
44         HttpServletRequest req = (HttpServletRequest)servletRequest;
45         HttpServletResponse rep = (HttpServletResponse)servletResponse;
46         HttpSession session = req.getSession();
47
48         //获取当前请求的uri
49         String uri = req.getRequestURI();
50
51         if (isIegalUrl(uri))
52         {
53             chain.doFilter(servletRequest, servletResponse);
54         }
55         else
56         {
57             //如果当前session中存储了用户信息则直接访问,否则跳转到登录页面
58             if (StringUtils.isEmpty(session.getAttribute("user")))
59             {
60                 rep.sendRedirect("login");
61             }
62             else
63             {
64                 chain.doFilter(servletRequest, servletResponse);
65             }
66         }
67
68     }
69
70
71     @Override
72     public void init(FilterConfig arg0) throws ServletException
73     {
74
75     }
76
77
78     private boolean isIegalUrl(String uri)
79     {
80         for (String string : urls) {
81             //如果当前请求包括这些静态资源文件,则不处理,
82             if (uri.indexOf(string) > -1)
83             {
84                 return true;
85             }
86         }
87
88         return false;
89     }
90
91 }

  上面提到的对静态资源不过滤,当然springmvc中也要设置静态资源的请求不经过DispatcherServlet,此时就需要在spring-mvc.xml中进行设置,小编基本使用默认的配置,如下代码中的<mvc:default-servlet-handler />

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xmlns:mvc="http://www.springframework.org/schema/mvc"
 6     xsi:schemaLocation="http://www.springframework.org/schema/beans
 7          http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
 8         http://www.springframework.org/schema/context
 9         http://www.springframework.org/schema/context/spring-context-4.3.xsd
10         http://www.springframework.org/schema/mvc
11         http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd ">
12
13     <context:component-scan base-package="com.yongcheng.liuyang.controller">
14     </context:component-scan>
15     <context:component-scan base-package="com.yongcheng.liuyang.listener" />
16
17 <!--     spring MVC不处理静态资源   -->
18     <mvc:default-servlet-handler />
19 <!--     支持MVC的注解驱动 -->
20     <mvc:annotation-driven />
21
22     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
23          id="internalResourceViewResolver" >
24 <!--         自动添加到路径中的前缀 -->
25         <property name="prefix" value="/jsp/" />
26 <!--         自动添加到路径中的后缀 -->
27         <property name="suffix" value=".jsp" />
28     </bean>
29
61 </beans>

       好了,以上就是springmvc中简答的filter使用!如有任何疑问,欢迎留言交流!!

原文地址:https://www.cnblogs.com/ljy-20180122/p/9307924.html

时间: 2024-08-30 04:05:20

springmvc中登录过滤器使用的相关文章

基于springMVC实现登录过滤器

此文章是基于 搭建Jquery+SpringMVC+Spring+Hibernate+MySQL平台 一. 准备工作 1. 点击此下载相关文件,并把文件放到 ims 工程对应的文件夹下 二. 相关文件介绍 1. LoginFilter.java:登录过滤器,保证每次的url访问都对session进行验证 package com.ims.web; import java.io.IOException; import java.io.PrintWriter; import javax.servlet

在SpringMVC中使用过滤器(Filter)过滤容易引发XSS的危险字符

一 简介 如题所示,如果不在服务端对用户的输入信息进行过滤,然后该参数又直接在前台页面中展示,毫无疑问将会容易引发XSS攻击(跨站脚本攻击),比如说这样: form表单中有这么一个字段: <input type="text" id="author" name="author" placeholder="昵称" /> 然后潜在攻击者在该字段上填入以下内容: <script>alert('XSS')<

springmvc sessionfilter 登录过滤器

1.在web.xml中配置 1 <!-- sessionfilter --> 2 3 <filter> 4 <filter-name>sessionFilter</filter-name> 5 <filter-class>com.juin.filter.SessionFilter</filter-class> 6 </filter> 7 8 <filter-mapping> 9 <filter-name&

SpringMVC中使用Interceptor+Cookie实现在一定天数之内自动登录

一 简介 本篇文章主要介绍:在SpringMVC中如何使用Interceptor+Cookie实现在一定天数之内自动登录的功能.同时还介绍"如果校验失败则跳转到登录页面,在输入用户名.密码等完成登录之后又自动跳转到原页面"的功能实现 本次测试环境是SSM框架,在正式介绍本篇文章之前,建议需要熟悉以下前置知识点: Mybatis中使用mybatis-generator结合Ant脚本快速自动生成Model.Mapper等文件(PS:这是为了快速生成一些基本文件)   https://www

springMVC中实现用户登录权限验证

通过上网搜资料显示,使用filter和interceptor都可以实现.不过推荐使用interceptor. 下面就使用Interceptor实现用户登录权限验证功能. 拦截器需要实现Inceptor拦截器接口的三个方法. 1.preHandle方法,顾名思义,该方法将在请求处理之前进行调用.SpringMVC 中的Interceptor 是链式的调用的,在一个应用中或者说是在一个请求中可以同时存在多个Interceptor .每个Interceptor 的调用会依据它的声明顺序依次执行,而且最

SpringMVC学习(十二)——SpringMVC中的拦截器

SpringMVC学习(十二)--SpringMVC中的拦截器 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.本文主要总结一下SpringMVC中拦截器是如何定义的,以及测试拦截器的执行情况和使用方法. SpringMVC中拦截器的定义和配置 SpringMVC中拦截器的定义 在SpringMVC中,定义拦截器要实现HandlerInterceptor接口,并实现该接口中提供的三个方法,如下: public class Inter

SpringMVC中的拦截器

Spring MVC 的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. 用户可以自己定义一些拦截器来实现特定的功能. 拦截器链(Interceptor Chain)就是将拦截器按一定的顺序联结成一条链. 在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用. 拦截器和过滤器的区别: 过滤器是servlet规范中的一部分,任何java web工程都可以使用. 拦截器是SpringMVC框架自己的,只有使用了SpringMVC框架的

Java Web之简单的登录过滤器实现方法

过滤过滤,实际就是把需要和不需要的东西分开! 今天来说道说道我们程序中的‘登录过滤器’ ,首先我们看看一下面的问题: 1.“登录过滤器”是干什么用的? 1)“登录过滤器”就是为了防止在用户没有登录的情况下来访问我们的网站. 2)举例:main.html 这个网页是需要通过login.html这个网页登录后才可以访问的,现在有一个用户没有登录,直接访问main.html成功了.那么,这样的网站是不是觉得不安全呢?用户不用登录随随便便就访问了.so,we have to need a filter.

SpringMVC中使用Interceptor拦截器

SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间. 一.定义Interceptor实现类 SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的.在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方式是要定义的Intercep