个人笔记--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的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊,而且看的比较粗浅,没有一个全局而又细致的认识,由于已至深 ...
随机推荐
- Cocos2d-x实现粒子效果的三种方式
在Cocos2d-x中,实现粒子效果可以有三种方法. Normal 0 10 pt 0 2 false false false EN-US ZH-CN X-NONE $([{£¥·'"〈&l ...
- JSTL-core核心代码标签库中的forEach,remove, forTokens,choose,when,otherwise,redirect 标签
<%@ page language="java" import="java.util.*, cn.hncu.domain.*" pageEncoding= ...
- windows 下 node 多版本管理工具 - gnvm
最近写了各个构建工具, 开发环境为mac,需要在windows下测试通过: 因为很久不用windows,windows下的node 版本还是 0.10.* 的,因此决定升级node mac 下我使用的 ...
- WPF在后台中写一个鼠标移入移出的操作
在这个问题上我纠结了好久就是为了一个问题就是forebackground这个属性 lblPwd.Foreground = Brushes.Black;我以前一直以为是fontground这个属性可是我 ...
- c基础语法
1 连续写两个分号,第2个分号就是一条空语句,空语句实际是什么也不做,语法是正确的,编译不会出错. 空语句可以增加程序的可读性,可以作为待写的函数体.循环体.语句块.所以,空语句是可以有用的. 2 s ...
- 并发与多版本:update重启动问题
以下演示重启动问题,请注意 before触发器和after触发器的行为区别,因为before触发器会触发两次而导致重启动问题,因此使用after触发器更加高效,应该尽量避免在所有触发器中使用自治事务 ...
- [转]SharePoint 2010/2013 使用Javascript来判断权限的三种方法
本文讲述SharePoint 2010/2013 使用Javascript来判断权限的三种方法的实现方式及其优缺点. 1. 根据用户所在的SharePoint组(比如用户在Leader 组才可以使用审 ...
- C# 操作数据库的几种方式(数据库使用SQL SERVER2008)
一:通过常规 T-SQL 语句 (只写删除操作,其他同理) string strConn = ConfigurationManager.ConnectionStrings["SiteConn ...
- 那天有个小孩跟我说LINQ(二)转载
1 LINQ TO Objects续(代码下载) 新建项目 linq_Ch2控制台程序,新建一个Entity文件夹 1.1 学生成绩查询(练习Join) 有三张表如下 ...
- ANDROID_SDK_HOME设置
创建.删除和浏览AVD之前,通常应该先为Android SDk设置一个环境变量:ANDROID_SDK_HOME,该环境变量的值为磁盘上一个已有的路径.如果不设置环境变量,开发者创建的虚拟设备默认保存 ...