用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. [NOIP2013D2]

    T1 Problem 洛谷 Solution 这是线性扫描题吧. 就从1 ~ n 循环,若比起面高,则 ans += h[i] - h[i - 1]. Code #include<cmath&g ...

  2. "No entity found for query"(转)

    很久以前一直用EntityManager下getResultList()查询数据,即便一个数据亦是如此,所以要频繁的List.get(0).新接口getSingleResult()出现了,然后就开始频 ...

  3. js 数组去重复两种方法一看就懂

    var arr=[1,1,2,2,3,5,2];function uniqueArr(arr){ var data=[]; for(var i=0;i<arr.length;i++){ if(d ...

  4. Ubuntu 中文拼音输入法键入异常

    如果确定系统装的OK,可以修复ubuntu Ctrl+Alt+t切出终端,输入命令:  " ibus-daemon -drx",然后再输入拼音试一试就会OK .

  5. Visual Studio 2017 离线安装包

    vs_community.exe --layout D:vs2017offline-en --add Microsoft.VisualStudio.Workload.ManagedDesktop -- ...

  6. 初读"Thinking in Java"读书笔记之第八章 --- 多态

    再论向上转型 在某些方法中,仅接收基类作为参数,而不是特殊的导出类,会使得程序更容易扩展. 转机 方法调用绑定 前期绑定(编译期绑定):在编译期将一个方法调用和方法主体关联起来. 后期绑定(动态绑定或 ...

  7. oracle入门之分页查询

    oracle的分页查询共三种方法 1.根据ROWID来分页(速率一般) SQL>select * from emp where rowid in (select rid from (select ...

  8. SpringCloud----熔断机制 -- 断路器hystrix

    参考借鉴:http://www.cnblogs.com/chry/p/7279856.html SpringCloud Netflix实现了断路器库的名字叫Hystrix. 在微服务架构下,通常会有多 ...

  9. 使用SSD检测框架训练自己的数据

    数据集做好后,训练程序为/examples/ssd/ssd_pascal.py,运行之前,我们需要修改相关路径代码,主要是训练路径的修改和关于自己数据集参数的一些修改. cd /examples/ss ...

  10. CSS&JS小结

    回顾:html: 作用:展示 文件标签: <html> <head> <title></title> </head> <body> ...