个人笔记--Servlet之过滤器实现权限拦截
一、编写一个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之过滤器实现权限拦截的更多相关文章
- 个人笔记--struts2对Action的权限拦截
一.编写一个类实现com.opensymphony.xwork2.interceptor.Interceptor 接口 PermissionInterceptor.java <pre name= ...
- Java Servlet 过滤器与 springmvc 拦截器的区别?
前言:在工作中,遇到需要记录日志的情况,不知道该选择过滤器还是拦截器,故总结了一下. servlet 过滤器 定义 java过滤器能够对目标资源的请求和响应进行截取.过滤器的工作方式分为四种 应用场景 ...
- Java过滤器与SpringMVC拦截器的差异学习笔记
学习摘录地址:http://blog.csdn.net/chenleixing/article/details/44573495 今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了 ...
- JAVA过滤器与SpringMVC拦截器之间的区别
今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊, 而且看的比较粗浅,没有一个全局而又细致的认识,由于已至 ...
- Java过滤器与SpringMVC拦截器之间的关系与区别
今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊,而且看的比较粗浅,没有一个全局而又细致的认识,由于已至深 ...
- Java过滤器,SpringMVC拦截器之间的一顺序点关系
由于最近做的项目中有一部分是接口远程调用,用到了接入权限和业务权限的鉴定,需要采用SpringMVC的拦截器,以前用Struts2的时候用过拦截器,而SpringMVC的拦截器功能之前没研究过,所以这 ...
- servlet之过滤器(转载)
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 一.Filter 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...
- Servlet Filter 过滤器
Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源: 例如Jsp, Servlet, 静态图片文件或静态 ht ...
- 160509、Java过滤器与SpringMVC拦截器之间的关系与区别
今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊,而且看的比较粗浅,没有一个全局而又细致的认识,由于已至深 ...
随机推荐
- 我们应该如何去了解JavaScript引擎的工作原理 系列
http://www.nowamagic.net/librarys/veda/detail/1579
- 10465 - Homer Simpson 贪心
Homer Simpson Time Limit: 3 seconds Memory Limit: 32 MB Home ...
- Linux ps aux指令詳解--转
linux上进程有5种状态: 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有 ...
- android开发之wheel控件使用详解
出门在外生不起病呀,随便两盒药60多块钱.好吧,不废话了,今天我们来看看wheel控件的使用,这是GitHub上的一个开源控件,用起来十分方便,我们可以用它做许多事情,比如做一个自定义的datepic ...
- APT源
Debian 6.0.7 deb http://mirrors.163.com/debian squeeze main non-free contribdeb http://mirrors.163.c ...
- 友元(friend)--初学篇
友元:友好的元子,,,,呵呵呵 一般一个类中有私有(private),公有(public),和保护(protected)三种类型成员,而只有public成员才可以在类外被随便访问,protected只 ...
- 远程之SSH
SSH(Secure Shell的缩写),由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议.SSH 是目前较可靠,专为远 ...
- modelsim remote
远程桌面登陆我的台式机上的账号,然后运行modelsim 出现该问题: Unable to checkout a viewer license necessary for use of the Mod ...
- Sql Server 与CLR集成
.NET编程和SQL Server ——Sql Server 与CLR集成 一.SQL Server 为什么要与CLR集成 1. SQL Server 提供的存储过程.函数等十分有限,经常需要外部 ...
- Unity3D NGUI学习(一)血条
这次来讲讲Unity3D NGUI这个插件的学习,这个插件是收费的,不过去网上可以下载得很多可用版本.用来做用户的交互UI,学习起来比较简单 第一步,导入NGUI包 http://pan.baidu. ...