Spring MVC过滤器-登录过滤的代码实现

作者:geloin 时间:2021-06-05 15:01:43 

一个非常简单的登录权限 * ,具体代码如下:

以下代码是继承OncePerRequestFilter实现登录过滤的代码:


/**
*
* @author geloin
* @date 2012-4-10 下午2:37:38
*/
package com.test.spring.filter;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.filter.OncePerRequestFilter;

/**
* 登录过滤
*
* @author geloin
* @date 2012-4-10 下午2:37:38
*/
public class SessionFilter extends OncePerRequestFilter {

/*
  * (non-Javadoc)
  *
  * @see
  * org.springframework.web.filter.OncePerRequestFilter#doFilterInternal(
  * javax.servlet.http.HttpServletRequest,
  * javax.servlet.http.HttpServletResponse, javax.servlet.FilterChain)
  */
 @Override
 protected void doFilterInternal(HttpServletRequest request,
     HttpServletResponse response, FilterChain filterChain)
     throws ServletException, IOException {

// 不过滤的uri
   String[] notFilter = new String[] { "login.html", "index.html" };

// 请求的uri
   String uri = request.getRequestURI();

// uri中包含background时才进行过滤
   if (uri.indexOf("background") != -1) {
     // 是否过滤
     boolean doFilter = true;
     for (String s : notFilter) {
       if (uri.indexOf(s) != -1) {
         // 如果uri中包含不过滤的uri,则不进行过滤
         doFilter = false;
         break;
       }
     }
     if (doFilter) {
       // 执行过滤
       // 从session中获取登录者实体
       Object obj = request.getSession().getAttribute("loginedUser");
       if (null == obj) {
         // 如果session中不存在登录者实体,则弹出框提示重新登录
         // 设置request和response的字符集,防止乱码
         request.setCharacterEncoding("UTF-8");
         response.setCharacterEncoding("UTF-8");
         PrintWriter out = response.getWriter();
         String loginPage = "....";
         StringBuilder builder = new StringBuilder();
         builder.append("<script type=\"text/javascript\">");
         builder.append("alert('网页过期,请重新登录!');");
         builder.append("window.top.location.href='");
         builder.append(loginPage);
         builder.append("';");
         builder.append("</script>");
         out.print(builder.toString());
       } else {
         // 如果session中存在登录者实体,则继续
         filterChain.doFilter(request, response);
       }
     } else {
       // 如果不执行过滤,则继续
       filterChain.doFilter(request, response);
     }
   } else {
     // 如果uri中不包含background,则继续
     filterChain.doFilter(request, response);
   }
 }

}

写完过滤器后,需要在web.xml中进行配置:


<filter>
 <filter-name>sessionFilter</filter-name>
 <filter-class>com.test.spring.filter.SessionFilter</filter-class>
</filter>
<filter-mapping>
 <filter-name>sessionFilter</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>

来源:http://blog.csdn.net/geloin/article/details/7445441

标签:springmvc,登录过滤
0
投稿

猜你喜欢

  • Unity3D实现分页系统

    2022-06-28 22:53:37
  • 深入讲解SpringBoot Actuator是什么

    2022-08-21 13:44:09
  • Java类中this关键字与static关键字的用法解析

    2023-11-09 22:45:19
  • Java基于IO流读取文件的方法

    2023-08-11 16:23:57
  • python实现数独游戏 java简单实现数独游戏

    2022-10-18 00:46:29
  • Java实现几种序列化方式总结

    2023-02-13 06:18:27
  • springcloud微服务基于redis集群的单点登录实现解析

    2023-05-27 17:10:32
  • 关于重写equals()方法和hashCode()方法及其简单的应用

    2023-08-01 06:48:13
  • springboot使用Logback把日志输出到控制台或输出到文件

    2022-05-30 17:34:30
  • 一个依赖搞定 Spring Boot 接口防盗刷的流程分析

    2023-06-01 16:46:41
  • 基于Java代码实现支付充值的通用流程

    2021-09-04 00:48:45
  • Android 捕获错误日志的方法

    2021-06-16 16:24:44
  • Java基本数据类型与类型转换实例分析

    2021-07-13 14:41:29
  • SpringBoot错误处理机制以及自定义异常处理详解

    2021-09-23 05:45:29
  • SpringBoot实现Excel文件批量上传导入数据库

    2023-11-29 11:13:44
  • Android实现Tab布局的4种方式(Fragment+TabPageIndicator+ViewPager)

    2023-02-26 10:45:41
  • SpringMVC实现文件上传下载功能

    2023-09-05 19:49:39
  • 解决Android Studio 3.0 butterknife:7.0.1配置的问题

    2021-08-20 09:23:05
  • Java和C#输入输出流的方法(详解)

    2022-06-24 09:21:02
  • java中 ${} 和 #{} 有什么区别

    2023-11-29 01:34:32
  • asp之家 软件编程 m.aspxhome.com