http://www.cnblogs.com/hemingwang0902/archive/2012/01/09/2316956.html

UserFilter.java

package filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;

public class UserFilter implements Filter {
 
 
 private String sessionKey;
 
 
 private String excepUrl;
 
 
 private String redirectUrl;
 
 public void init(FilterConfig cfg) throws ServletException {
  sessionKey = cfg.getInitParameter("sessionKey");
  redirectUrl = cfg.getInitParameter("redirectUrl");
  excepUrl = cfg.getInitParameter("excepUrl");
 }
 
 
 public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
  // 如果 sessionKey 为空,则直接放行
  if (StringUtils.isBlank(sessionKey)) {
   chain.doFilter(req, res);
   return;
  }
//      * 请求 http://127.0.0.1:8080/webApp/home.jsp?&a=1&b=2 时
//          * request.getRequestURL(): http://127.0.0.1:8080/webApp/home.jsp
//         * request.getContextPath(): /webApp 
//         * request.getServletPath():/home.jsp
//         * request.getRequestURI(): /webApp/home.jsp
//         * request.getQueryString():a=1&b=2
  HttpServletRequest request = (HttpServletRequest) req;
  HttpServletResponse response = (HttpServletResponse) res;
  String servletPath = request.getServletPath();//当前页面的路径(如"/index.jsp")
  // 如果请求的路径与redirectUrl(将要跳转的页面)相同,或请求的路径是排除的URL时,则直接放行
  if (servletPath.equals("/"+redirectUrl) || excepUrl.contains(servletPath)) {
   chain.doFilter(req, res);
   return;
  }
  
  Object sessionObj = request.getSession().getAttribute(sessionKey);
  // 如果Session为空,则跳转到指定页面
   if (sessionObj == null) {
   response.sendRedirect(redirectUrl);
    } else {
     chain.doFilter(req, res);
   }
   }
 
 public void destroy() {
  
 }

}

web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<filter>

<filter-name>UserFilter</filter-name>

<filter-class>filter.UserFilter</filter-class>

<init-param>

<description>

将当前登录的用户的信息保存在 session 中时使用的key,

如果没有配置此参数,则该过滤器不起作用

</description>

<param-name>sessionKey</param-name>

<param-value>userInfo</param-value>

</init-param>

<init-param>

<description>

如果用户未登录(即在 session 中 key 为 sessionKey 的属性不存在或为空),

则将请求重定向到该 url。该 url 不包含web应用的 ContextPath。

如果不配置此参数,则在用户未登录系统的情况下,直接重定向到web应用的根路径(/)

</description>

<param-name>redirectUrl</param-name>

<param-value>index.jsp</param-value>

</init-param>

<init-param>

<description>

不需要进行拦截的 url,即:如果当前请求的 url 的 servletPath 能在此excepUrl里,则直接放行(即使未登录系统)。

格式如(/checkuser.jsp /up.jsp)

</description>

<param-name>excepUrl</param-name>

<param-value>/checkuser.jsp</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>UserFilter</filter-name>

<url-pattern>*.jsp</url-pattern>

</filter-mapping>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

<login-config>

<auth-method>BASIC</auth-method>

</login-config>

</web-app>

jsp filter登录限制过滤器的更多相关文章

  1. Filter登录验证过滤器(全局)

    通过Filter来定义一个登录验证过滤器,这是就不需要在每一个JSP页面添加判断用户合法性的代码了. 以下示例中包含了5个文件,一个是登录表单LoginForm.jsp,一个是登录判断页LoginCo ...

  2. Java Web Filter登录验证

    初做网站需要登录验证,转自 :http://blog.csdn.net/daguanjia11/article/details/48995789 Filter: Filter是服务器端的组件,用来过滤 ...

  3. JSP Filter,GZIP压缩响应流

    url:http://hi.baidu.com/xhftx/blog/item/fbc11d3012648711ebc4af59.html 关键词:JSP,Filter,Servlet,GZIP 现在 ...

  4. Introducation of Servlet filter(servlet过滤器介绍 )

    本文章向大家介绍Servlet Filter,主要包括 Servlet Filter使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下. 过滤器是一个可以转换 ...

  5. 利用Java EE里jsp制作登录界面

    jsp连接数据库.百度经验. 1.在新建的Project中右键新建Floder 2.创建名为lib的包 3.创建完毕之后的工程目录 4.接下来解压你下载的mysql的jar包,拷贝其中的.jar文件 ...

  6. 纯JSP简单登录实例

    记一下,免得以后忘记了,又要去查. 文件共有四个web.xml.login.jsp.logout.jsp.welcome.jsp四个文件 测试环境:Tomcat 6.0.x 假设项目名称是LoginS ...

  7. Spring Security 学习笔记-登录认证过滤器

    UsernamePasswordAuthenticationFilter用户登录验证过滤器,它继承自AbstractAuthenticationProcessingFilter. 登录处理url默认使 ...

  8. JSP实现登录删除添加星座等(带样式)

    功能要求 1.完成两个页面 2.第一个登陆页面login. jsp 3.第二个用户管理页面useManage. jsp 4.有登录功能(能进行用户名密码的校验,用户名若为自己的学号密码为班级号,允许登 ...

  9. 自动登录(过滤器filter的应用)

    //反复实验的时候注意数据库数据的更新 //将数据存储到cookie里面 protected void doGet(HttpServletRequest request, HttpServletRes ...

随机推荐

  1. 常用的JS数据类型转换方法

    JS 数据类型转换的方法有以下3种:1)使用转换函数2)强制类型转换3)利用js变量弱类型特性进行转换 1:js提供了parseInt()和parseFloat()这两个转换函数. 这里输入内容par ...

  2. 大数据笔记09:大数据之Hadoop的HDFS使用

    1. HDFS使用: HDFS内部中提供了Shell接口,所以我们可以以命令行的形式操作HDFS

  3. SQL数值函数

    /*abs(n)返回参数n所指定数值的绝对值(如果参数值为NULL,则返回结果为NULL,下同).*/--SELECT ABS(-3.14) FROM DUAL; --3.14 /*round(n[, ...

  4. OD: Register, Stack Frame, Function Reference

    几个重要的 Win32 寄存器 EIP 指令寄存器(Extended Instruction Pointer) 存放一个指针,指向下一条等待执行的指令地址 ESP 栈指针寄存器(Extended St ...

  5. css3选择符使用个人理解。

    元素选择符: 通配选择符:一般用* 星号表示  他会命中整体标签. 类型选择符:一般用者空格表示  他会命中标签自己的所有子元素. ID选择符:  一般用# 井号表示  他会命中以id为属性的标签   ...

  6. 腾讯云(centos)上安装apache

    安装 yun install httpd 随系统自启动 chkconfig httpd on 修改/etc/httpd/conf/httpd.conf文件 #修改WWW目录为自己的目录 Dcoumen ...

  7. 关于winform主题IrisSkin2的编写

    第一步:首先引用IrisSkin2.dll. 第二步自定义类: /// <summary> /// 窗体主题边界类 /// </summary> public class Fo ...

  8. The type or namespace name 'Script' does not exist in the namespace 'System.Web' (are you missing an assembly reference?)

    应该说是 .net4 的bug,没有所谓的 System.Web.Extensions.dll 库文件,需要将项目的 Target Framework修改为 3.5版本,才能加载System.Web. ...

  9. 验证码 Demo

    //设置响应头 response.setCharacterEncoding("image/jpeg"); int width=160; int height=40; Buffere ...

  10. eclipse python开发环境搭建

    eclipse python开发环境搭建[非原创] 1.在www.eclipse.org官网下载Eclipse Classic 4.2.2,Win7 64位下载eclipse-SDK-4.2.2-wi ...