个人笔记--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的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊,而且看的比较粗浅,没有一个全局而又细致的认识,由于已至深 ...
随机推荐
- find_if函数与partition函数的转换
编写程序,求大于等于一个给定长度的单词有多少.我们还会修改输出,使程序只打印大于等于给定长度的单词. 使用find_if实现的代码如下: #include<algorithm> #incl ...
- wpf 计算器布局练习
先看一下windows自带计算机的布局: 大概布局能看出,有菜单栏(menu),有显示框(textbox),然后剩下的6行5列的布局 先看下代码: <StackPanel> <Gri ...
- WPF制作QQ列表(仿qq列表特效)
先看效果图:这个是折叠特效. 代码结构: model是我们的数据模型,定义了在列表显示的人物名称 图片 简介 . Resource是我们的图片资源 和 存储图片资源路径.名称 ...
- java与.net比较学习系列开发环境和常用调试技巧常用操作快捷键
调试 F5 F11 调试运行 CTRL+F5 暂无 非调试运行 F6 不适用 编译整个解决方案 SHIFT+F6 不适用 编译当前选择的工程 SHIFT+F5 CTRL ...
- overflow:hiddden与绝对定位的应用场景的事例
做一个点击查看显示详细信息的效果. 说一下问题描述,最外面的父元素overflow-parent设置了overflow:hidden, 然后子元素overflow-child没有设置overflow, ...
- ie各个版本hack
/*类内部hack:*/ .header {_width:100px;} /* IE6专用*/ .header {*+width:100px;} /* IE7专用*/ .header {*width: ...
- RabbitMQ 原文译05--Topics
在之前的系统中,我们改进了我们的日志系统,我们使用direct 交换机代替fanout交换机,可以实现选择性的接受日志. 虽然使用direct 交换机改进了我们的系统,但是对于多种条件的判断,依然存在 ...
- Path类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- exists改写SQL,使其走正确的执行计划
数据库环境:SQL SERVER 2005 今天看到一条SQL,写得不是很复杂,返回7000多条数据,却执行了15s.SQL文本及各表的数据量如下: SELECT acinv_07.id_item , ...
- iOS开发——JS网页交互——javaScript
JS中调用OC #import "ViewController.h" @interface ViewController () <UIWebViewDelegate> ...