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

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

以下代码是继承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> 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 浅谈springMVC拦截器和过滤器总结

    拦截器: 用来对访问的url进行拦截处理 用处: 权限验证,乱码设置等 spring-mvc.xml文件中的配置: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" x

  • 通过原理解析Spring mvc的内置编码过滤器

    前言 在Spring mvc框架中是如何解决从页面传来的字符串的编码问题的呢? 下面我们来看看Spring框架给我们提供过滤器CharacterEncodingFilter,话不多说了,来一起看看详细的介绍吧. web.xml 中 添加如下配置: <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.Ch

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

    一个非常简单的登录权限拦截器,具体代码如下: 以下代码是继承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.

  • Spring MVC下 bootStrap服务器分页代码

    因为Spring 对于ajax直接返回对象,到了WEB页面就转换成json 所以不需要使用JSON转换封装可以直接使用 <span style="white-space:pre"> </span>@RequestMapping(value = "/searchList.cqzk") @ResponseBody public BootPage<IllegalParkInfo> search(BootPage<IllegalPa

  • Spring mvc文件上传下载代码实例

    简介 文件上传是项目开发中最常见的功能之一 ,springMVC 可以很好的支持文件上传,但是SpringMVC上下文中默认没有装配MultipartResolver,因此默认情况下其不能处理文件上传工作.如果想使用Spring的文件上传功能,则需要在上下文中配置MultipartResolver. 前端表单要求:为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data.只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给

  • spring mvc实现登录账号单浏览器登录

    在很多web产品中都需要实现在同一时刻,只能允许一个账号同时只能在一个浏览器当中登录.通俗点讲就是当A账号在浏览器1当中登录了,此时在浏览器2中登录A账号.那么在浏览器1中的A账号将会被挤出去,当用户操作浏览器1的页面,页面会跳到登录页面,需要重新登录.那么我们怎么实现这样的功能呢?下面将给大家进行详细的介绍: 原理 用户A使用账号a在浏览器当中登录,然后用户B在另外一台电脑上的浏览器登录账号a,当用户B登录验证成功时,将会触发登录监听类,在监听类当中判断出账号a已经被用户A登录,就把用户A的账

  • Spring MVC URL地址映射的示例代码

    目录 1.@RequestMapping的介绍 2.映射单个URL 3.映射多个URL 4.映射URL在控制器上 5.@RequestMapping的常用属性 5.1value属性 5.2method属性 5.3params属性 6.小结 1.@RequestMapping的介绍 通过@RequestMapping,我们可以把请求地址和方法进行绑定的,可以在类.方法上进行声明. 类级别的注解负责把一个特定的请求路径映射到一个控制器上,把URL和类绑定 通过方法级别的注解可以细化映射,可以把一个特

  • Spring mvc Json处理实现流程代码实例

    接收JSON 浏览器传来的参数,可以是 key/value 形式的,也可以是一个 JSON 字符串.在 Jsp/Servlet 中,我们接收 key/value 形式的参数,一般是通过 getParameter 方法.如果客户端商户传的是 JSON 数据,我们可以通过如下格式进行解析: @RequestMapping("/addbook2") @ResponseBody public void addBook2(HttpServletRequest req) throws IOExce

  • 14个编写Spring MVC控制器的实用小技巧(吐血整理)

    本文介绍了编写Spring MVC框架的控制器(controller)的基础技巧和最佳操作.在Spring MVC框架中,编写控制器类通常是为了处理用户提出的请求. 编写完成后,控制器会调用一个业务类来处理业务相关任务,进而重定向客户到逻辑视图名.Springdispatcher servlet会对逻辑视图名进行解析,并渲染结果或输出.这就是一个典型的"请求-响应"的完整流程. 1.使用@controllerstereotype 创建一个能够处理单个或多个请求的控制器类,最简单的方法就

  • Spring MVC实现的登录拦截器代码分享

    之前接触过struts拦截器,但是没有使用过Spring MVC拦截器,今天花了一天时间好好研究了一下. 本文首先介绍了拦截器的基本概念,然后向大家阐述拦截器与过滤器的简要区别,通过HandlerInterceptor 接口中定义的三个方法实现拦截器功能,最后介绍了配置相关的代码,接下来看看具体内容. 定义拦截器 SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的.在SpringMVC 中定义一个Interceptor 非常简单,主要有两

  • Spring MVC 拦截器实现登录

    上篇博文我在博客中讲到如何使用spring MVC框架来实现文件的上传和下载,今天小钱给大家再来分享和介绍Spring MVC框架中相当重要的一块功能--拦截器. 关于拦截器的概念我在这里就不多说了,大家可以上网百度或者看别人写的具体博客,我今天要说的是拦截器在实际开发中它有什么作用,怎样用Spring MVC拦截器来实现可拔插方式管理各种功能.Interceptor拦截器,它的主要作用就是拦截用户的请求并进行相应的处理.什么意思呢?比如说:通过拦截器来进行用户的权限验证,或者是用来判断用户是否

  • Spring MVC登录注册以及转换json数据

    项目结构; 代码如下: BookController package com.mstf.controller; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.codehaus.jackson.map.ObjectMapper; import com.mstf.

随机推荐