• 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使用!如有任何疑问,欢迎留言交流!!

       

  • 相关阅读:
    MyEclipse 启动报错:'Building workspace' has encountered a problem解决方法
    MyEclipse快捷键大全
    Maven学习 (四) 使用Nexus搭建Maven私服
    PHP 语法
    PHP 在Win下的安装
    PHP 简介
    【CMS】安装CMS
    【CMS】DedeCMS Error: (PHP 5.3 and above) Please set 'request_order' ini value to include C,G and P (recommended: 'CGP') in php.ini
    mysqladmin: connect to server at 'localhost' failed
    解压版MySQL安装后初始化root密码
  • 原文地址:https://www.cnblogs.com/ljy-20180122/p/9307924.html
Copyright © 2020-2023  润新知