用Filter防止用户访问一些未被授权的资源,比如一个用户未登录就不允许访问网站的某些页面,并将页面重定向到需要用户登录的页面,下面是一个相关的例子:
package com.drp.util.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
javax.servlet.http.HttpSession;

public class AuthFilter implements
Filter {

public void destroy() {

}

public void
doFilter(ServletRequest servletRequest, ServletResponse servletResponse,

FilterChain filterChain) throws IOException, ServletException {
/**
1,doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括
*
表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过
*
滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。
*/

HttpServletRequest request = (HttpServletRequest)servletRequest;
/**
如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中
*
无法得到的方法,就要把此request对象构造成HttpServletRequest
*/
HttpServletResponse
response = (HttpServletResponse)servletResponse;

String currentURL =
request.getRequestURI(); //取得根目录所对应的绝对路径:

String targetURL =
currentURL.substring(currentURL.indexOf("/", 1),
currentURL.length());
//截取到当前文件名用于比较

HttpSession session = request.getSession(false);

if (!"/login.jsp".equals(targetURL)) {

//判断当前页是否是重定向以后的登录页面页面,如果是就不做session的判断,防止出现死循环
if (session == null ||
session.getAttribute("user") == null) {
//*用户登录以后需手动添加session

System.out.println("request.getContextPath()=" + request.getContextPath());

response.sendRedirect(request.getContextPath() + "/login.jsp");

//如果session为空表示用户没有登录就重定向到login.jsp页面
return;
}
}

//加入filter链继续向下执行
filterChain.doFilter(request, response);
/**
调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作
* 为它
的一个参数。在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另
*
一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活。
*/
}

public void
init(FilterConfig filterConfig) throws ServletException {

}
}

然后在配置文件web.xml里添加:
(请注意,过滤是在serlvet规范2.3版中初次引入的。因此,web.xml文件必须使用DTD的2.3以上版本。)

<filter>
<filter-name>AuthFilter</filter-name>

<filter-class>com.drp.util.filter.AuthFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>AuthFilter</filter-name>

<url-pattern>*.jsp</url-pattern>//表示对所有jsp文件有效
</filter-mapping>

引自:http://javaex.blog.163.com/blog/static/5139778620082124043801/

Filter用户例子的更多相关文章

  1. Java使用Filter用户权限控制

    package com.mvc.test; import javax.servlet.ServletException; import javax.servlet.annotation.WebServ ...

  2. DirectShow Filter 开发典型例子分析 ——字幕叠加 (FilterTitleOverlay)1

    本文分析一下<DirectShow开发指南>中的一个典型的Transform Filter的例子:字幕叠加(FilterTitleOverlay).通过分析该例子,我们可以学习到Direc ...

  3. MVC Action Filter

    ASP.NET MVC Framework支持四种不同类型的Filter: Authorization filters – 实现IAuthorizationFilter接口的属性. Action fi ...

  4. ASP.NET MVC的Action Filter

    一年前写了一篇短文ASP.NET MVC Action Filters,整理了Action Filter方面的资源,本篇文章详细的描述Action Filter.Action Filter作为一个可以 ...

  5. Servlet、Filter、Listener

    1.Servlet 1.1servlet接口 All Known Implementing Classes:GenericServlet, HttpServlet GenericServlet:与协议 ...

  6. 转:Directshow开发的一些例子

    DirectShow Filter 开发典型例子分析 --字幕叠加 (FilterTitleOverlay)1 本文分析一下<DirectShow开发指南>中的一个典型的Transform ...

  7. filter在CSS中的效果

    滤镜说明: Alpha:设置透明层次 blur:创建高速度移动效果,即模糊效果 Chroma:制作专用颜色透明 DropShadow:创建对象的固定影子 FlipH:创建水平镜像图片 FlipV:创建 ...

  8. CSS中filter滤镜学习笔记

    1.CSS静态滤镜样式 (filter)(只有IE4.0以上支持)  CSS静态滤镜样式的使用方法:{ filter : filtername( parameters1, parameters2, . ...

  9. CentOS 7 用户账户配置

    说明: 1.这篇博文记录的是CentOS 7 用户账户的配置,包括添加用户.添加用户组.删除用户.删除用户组等.其中包括分析用户的配置文件.目录以及对安全的思考. 2.用户配置方面CentOS 7与以 ...

随机推荐

  1. I2C 上拉电阻选择计算公式

    I2C接口上拉电阻的选择 - I2C接口上拉电阻的选择 1.I2C接口的输出端是漏极开路或集电极开路,所以必须在接口外接上拉. 2.上拉电阻的范围很宽,但也需要跟据功耗.信号上升时间等具体确定. 和速 ...

  2. 前端开发面试题总结之——JAVASCRIPT(三)

    ___________________________________________________________________________________ 相关知识点 数据类型.运算.对象 ...

  3. Jmeter之https脚本录制

    jmeter录制脚本时,跟http脚本录制主要区别是,https录制需要添加安全证书.   一.jmeter代理服务器及证书配置. 1.打开jmeter,右键测试计划添加线程组,右键工作台--> ...

  4. Git bash 配置多个远端仓库

    $ cat .ssh/config #aliyeye Host aliyeye.com.cn HostName aliyeye.com.cn PreferredAuthentications publ ...

  5. python笔记27-time模块

    import datetime, time#一种是时间戳.一种是格式化时间.一种是时间元组# print(time.timezone) # 和标准时间相差的时间,单位是sprint(int(time. ...

  6. 获取当前TestStep发送的request信息

    在当前test step的Script Assertion里添加 // Get request url def requestURL = messageExchange.getEndpoint() / ...

  7. python中的lambda表达式

    lambda是python中匿名函数的写法  我们可以在不定义函数名的情况下一边定义并调用这个函数 例子: 普通方法定义函数:def  plus(a,b): return a+b lambda方法  ...

  8. Shell 函数相关

    一.函数的两种定义方式 第一种:函数名(){ ...... } 第二种:function 函数名{ ...... } 调用时直接使用 函数名 调用,将函数当作一个“命令”即可.函数内部直接使用 $1. ...

  9. Android使用Fiddler模拟弱网络环境测试

    原文:https://blog.csdn.net/u010618194/article/details/76652513 1.设置fiddler 顶部Tools-->Connections,把p ...

  10. 安装完成IIS后找不到IIS Admin Service

    系统版本: Windows Server 2008 R2 Enterprise 64-bit IIS版本:IIS 7.5 问题: 在系统运行里面输入"组件服务",依次点开组件服务- ...