一、编写一个Java类实现javax.servlet.Filter接口

package cn.edu.sxu.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.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class PermissionFilter implements Filter {
private String includeUrl;
public void destroy() {
System.out.println("权限拦截销毁...");
} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
//从会话中拿登录后session保存的uname
Object obj = req.getSession().getAttribute("uname");
//获取请求路径
String path = req.getServletPath();
//如果会话中保存了uname或者访问路径在includeUrl中
if(null!=obj||includeUrl.contains(path))
{
chain.doFilter(req,resp);
}
else
{
System.out.println("重定向 ...");
resp.sendRedirect(req.getContextPath()+"/login.jsp");
}
} public void init(FilterConfig config) throws ServletException {
System.out.println("权限拦截启用...");
//从web.xml中PermissionFilter加载参数获取可访问路径
this.includeUrl = config.getInitParameter("includeUrl");
} }

二、在web.xml中配置此过滤器

<filter>
<filter-name>PermissionFilter</filter-name>
<filter-class>cn.edu.sxu.filter.PermissionFilter</filter-class>
<init-param>
<param-name>includeUrl</param-name>
<!--这里是允许通过的访问路径-->
<param-value>/index.jsp,/login.jsp,/register.jsp</param-value>
</init-param>
</filter> <filter-mapping>
<filter-name>PermissionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

以上就可以实现权限拦截功能了

下面将此过滤器与struts2中StrutsPrepareAndExecuteFilter过滤器整合代码

package cn.sky.bookshop.filter;

import java.io.IOException;

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.struts2.dispatcher.Dispatcher;
import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter; import cn.sky.bookshop.utils.DateUtil; public class StrutsExtendsI18nFilter extends StrutsPrepareAndExecuteFilter {
private String includeUrl; @Override
public void init(FilterConfig filterConfig) throws ServletException {
this.includeUrl = filterConfig.getInitParameter("includeUrl");
super.init(filterConfig); // 调用父类(struts2核心过滤器的初始化方法)初始化方法初始化
} @Override
protected void postInit(Dispatcher dispatcher, FilterConfig filterConfig) {
System.out.println("这里你可以让struts2初始化再做些什么事。。。");
super.postInit(dispatcher, filterConfig); // 父类这个方法是空的,这句话是废话
} @Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 使用国际化封装request,重写getLocale()方法
HttpServletRequest myrequest = new MyHttpRequest((HttpServletRequest) request);
HttpServletResponse resp = (HttpServletResponse) response;
//获取会话session里的uname
Object obj = myrequest.getSession().getAttribute("uname");
//获取访问路径
String path = myrequest.getServletPath();
//如果session中存在uname,或includeUrl中包含了访问路径path
if (null != obj || includeUrl.contains(path)) {
// 调用父类Struts2核心过滤器的doFilter方法
super.doFilter(myrequest, response, chain);
} else {
// 重定向回登录页面
resp.sendRedirect(myrequest.getContextPath() + "/login.jsp");
}
// super.doFilter(myrequest, response, chain);
} @Override
public void destroy() {
} }

在web.xml中的配置

  <filter>
<filter-name>struts2.3</filter-name>
<filter-class>cn.sky.bookshop.filter.StrutsExtendsI18nFilter</filter-class>
<init-param>
<param-name>includeUrl</param-name>
<param-value>/login.jsp,/register.jsp,/index.jsp,/user/user_login.action</param-value>
</init-param>
</filter> <filter-mapping>
<filter-name>struts2.3</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

个人笔记--Servlet之过滤器实现权限拦截的更多相关文章

  1. 个人笔记--struts2对Action的权限拦截

    一.编写一个类实现com.opensymphony.xwork2.interceptor.Interceptor 接口 PermissionInterceptor.java <pre name= ...

  2. Java Servlet 过滤器与 springmvc 拦截器的区别?

    前言:在工作中,遇到需要记录日志的情况,不知道该选择过滤器还是拦截器,故总结了一下. servlet 过滤器 定义 java过滤器能够对目标资源的请求和响应进行截取.过滤器的工作方式分为四种 应用场景 ...

  3. Java过滤器与SpringMVC拦截器的差异学习笔记

    学习摘录地址:http://blog.csdn.net/chenleixing/article/details/44573495 今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了 ...

  4. JAVA过滤器与SpringMVC拦截器之间的区别

    今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊, 而且看的比较粗浅,没有一个全局而又细致的认识,由于已至 ...

  5. Java过滤器与SpringMVC拦截器之间的关系与区别

    今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊,而且看的比较粗浅,没有一个全局而又细致的认识,由于已至深 ...

  6. Java过滤器,SpringMVC拦截器之间的一顺序点关系

    由于最近做的项目中有一部分是接口远程调用,用到了接入权限和业务权限的鉴定,需要采用SpringMVC的拦截器,以前用Struts2的时候用过拦截器,而SpringMVC的拦截器功能之前没研究过,所以这 ...

  7. servlet之过滤器(转载)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 一.Filter 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...

  8. Servlet Filter 过滤器

    Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源: 例如Jsp, Servlet, 静态图片文件或静态 ht ...

  9. 160509、Java过滤器与SpringMVC拦截器之间的关系与区别

    今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊,而且看的比较粗浅,没有一个全局而又细致的认识,由于已至深 ...

随机推荐

  1. Socket.io各个发送消息的含义

    // send to current request socket client socket.emit('message', "this is a test"); // send ...

  2. 查询制定行数的数据(2)对了,mysql不能用top关键字

    采用嵌套查询的方式,倒序之后前10条 倒序之后前9条 采用嵌套查询的方式,倒序之后前10条 排正序之后从第一条开始弄十条数据 排正序之后从第一条开始弄九条数据 排正序之后从第十条开始弄十条数据 排正序 ...

  3. webform 转 MVC 飞一般的感觉

    前言: 浅谈webform与mvc,让开发变得更加简单,这里主要通过比较webform与mvc的开发方式,以下全属个人看法,不完善的地方可以留言补充. 正文: 废话不多说,直接说工作中经常用到的地方 ...

  4. Extjs combobox设置默认值

    转载:http://www.54mask.com/extjs-combobox-default-value.html 相信很多人都遇到了在ExtJS框架中设置combo组件默认值的需求,ExtJS框架 ...

  5. 使用普通Windows服务创建Quartz.Net服务项目

    Quartz.NET 项目地址 http://quartznet.sourceforge.net/ 源码下载地址:Quartz.Net.2.0 首先创建Quartz.Net.2.0解决方案,添加 Wi ...

  6. c语言学习之基础知识点介绍(十六):文件操作

    一.文件的分类 1.文本文件:打开之后能看得懂的文件 2.二进制文件:打开之后看不懂,类似乱码之类的文件(视频,音频打开之后,能看.听,是应为电脑中装有播放器,播放器中含有解码器). 二.操作文件的步 ...

  7. 3.redis.3.2 下载,安装、配置、使用、集群主从创建 - 3

    当然,集群最主要的就是配置文件: 简单配置如下, port 7001 bind 127.0.0.1 databases 16 appendonly yes appendfilename "a ...

  8. JDK版本过高,导致Eclipse报错

    1.JDK版本如果比较高,而使用的eclipse版本比较低,导致在eclispe中不能识别而报错.   2.点击Attach Source添加rt.jar后,又出现如下错误 3.这样的错误就是由于ec ...

  9. Mysql笔记【3】-SQL约束

    SQL 约束 约束用于限制加入表的数据的类型. 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句). 我们将主要探讨以下几种约 ...

  10. Ubuntu_14.04安装docker

    Ubuntu_14.04安装docker $ sudo apt-get update $ sudo apt-get install apt-transport-https ca-certificate ...