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