`
kankan1218
  • 浏览: 276655 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

过滤器和拦截器的比较及未登录用户权限限制的实现(ZHUAN)

 
阅读更多

转自:

http://blog.csdn.net/zlcoy_1/article/details/5009198

需要实现的功能:判断用户是否已登录,未登录用户禁止访问任何页面或action,自动跳转到登录页面。

过程:因为对过滤器和拦截器都不熟悉,开始两种方式都问题不断,后调试通过,贴在这里留作小结和备忘

 

过滤器filter实现

配置:web.xml

 

[xhtml] view plaincopy
  1. <filter>  
  2.     <filter-name>RightFilter</filter-name>  
  3.     <filter-class>com.***.rights.RightFilter</filter-class>  
  4. </filter>  
  5. <filter-mapping>  
  6.     <filter-name>RightFilter</filter-name>  
  7.     <url-pattern>*.jsp</url-pattern>  
  8. </filter-mapping>  
  9. <filter-mapping>  
  10.     <filter-name>RightFilter</filter-name>  
  11.     <url-pattern>*.action</url-pattern>  
  12. </filter-mapping>  

 

代码:

 

[java] view plaincopy
  1. mport java.io.IOException;  
  2.   
  3. import javax.servlet.Filter;  
  4. import javax.servlet.FilterChain;  
  5. import javax.servlet.FilterConfig;  
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.ServletRequest;  
  8. import javax.servlet.ServletResponse;  
  9. import javax.servlet.http.HttpServlet;  
  10. import javax.servlet.http.HttpServletRequest;  
  11. import javax.servlet.http.HttpServletResponse;  
  12. import javax.servlet.http.HttpSession;  
  13.   
  14. public class RightFilter extends HttpServlet implements Filter {  
  15.   
  16.     public void doFilter(ServletRequest arg0, ServletResponse arg1,  
  17.             FilterChain arg2) throws IOException, ServletException {  
  18.         HttpServletResponse response = (HttpServletResponse) arg1;    
  19.         HttpServletRequest request=(HttpServletRequest)arg0;  
  20.         HttpSession session = request.getSession(true);    
  21.         String usercode = (String) session.getAttribute("usercode");//  
  22.         String url=request.getRequestURI();  
  23.         if(usercode==null || usercode.equals(""))  
  24.         {  
  25.             //判断获取的路径不为空且不是访问登录页面或执行登录操作时跳转  
  26.             if(url!=null && !url.equals("") && ( url.indexOf("Login")<0 && url.indexOf("login")<0 ))  
  27.             {  
  28.                 response.sendRedirect("登录路径");  
  29.                 return ;  
  30.             }             
  31.         }  
  32.             //已通过验证,用户访问继续  
  33.             arg2.doFilter(arg0, arg1);  
  34.             return;  
  35.     }  
  36.   
  37.     public void init(FilterConfig arg0) throws ServletException {  
  38.         // TODO Auto-generated method stub  
  39.   
  40.     }  

 

 

配置中的filter-mapping,定义的是需过滤的请求类型,上面的配置即过滤所有对jsp页面和action的请求。过滤器的实现与struts2、spring框架无关,在用户请求被相应前执行,在过滤器中,可使用response.sendRedirect("")等方法

跳转到需要的链接,如登录页面、错误页面等,不需要跳转时,arg2.doFilter(arg0, arg1);即可继续执行用户的请求。注意使用filter时避免连续两次跳转,否则会报java.lang.IllegalStateException错误,具体配置方法网上有,除非必要,不建议使用/*(过滤所有访问)的配置方式,这样配置,图片、js文件、css文件等访问都会被过滤

 

 

拦截器interceptor实现:

配置:struts.xml

 

[xhtml] view plaincopy
  1. <interceptors>    
  2.             <!--定义一个名为authority的拦截器-->    
  3.             <interceptor  class="com.***.rights.RightInterceptor" name="rightInterceptor"/>    
  4.                 <!--定义一个包含权限检查的拦截器栈-->    
  5.                 <interceptor-stack name="mydefault">    
  6.                 <!--配置内建默认拦截器-->    
  7.                 <interceptor-ref name="defaultStack"/>    
  8.                 <!--配置自定义的拦截器-->    
  9.                 <interceptor-ref name="rightInterceptor"/>    
  10.             </interceptor-stack>    
  11.         </interceptors>    
  12.         <default-interceptor-ref name="mydefault" />    
  13.         <!--定义全局Result-->    
  14.         <global-results>   
  15.             <result name="login">Login.jsp</result>    
  16.             <result name="error">/error.jsp </result>   
  17.         </global-results>           

 

 

代码:

 

[java] view plaincopy
  1. import java.util.HashMap;  
  2. import java.util.Map;  
  3. import com.opensymphony.xwork2.Action;  
  4. import com.opensymphony.xwork2.ActionInvocation;  
  5. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  
  6. import com.opensymphony.xwork2.ActionContext;  
  7. public class RightInterceptor extends AbstractInterceptor {  
  8.   
  9.     @Override  
  10.     public String intercept(ActionInvocation invocation) throws Exception {  
  11.         //System.out.println("拦截器开始验证");  
  12.         try  
  13.         {  
  14.             ActionContext actionContext = ActionContext.getContext();  
  15.             Map<String,Object> session = actionContext.getSession();  
  16.             String user=session.get("usercode").toString();     
  17.             //当前用户session无效且访问的action不是登录action时,执行拦截,跳转  
  18.             if((user==null || user.equals("")) && !invocation.getAction().getClass().getName().equals("登录action"))   
  19.             {  
  20.                 return Action.LOGIN;  
  21.             }  
  22.         }  
  23.         catch(Exception e)  
  24.         {  
  25.             e.printStackTrace();  
  26.             return Action.LOGIN;  
  27.         }  
  28.         //System.out.println("拦截器通过验证");  
  29.         return invocation.invoke();//执行访问的action  
  30.           
  31.   
  32.     }  
  33.   
  34. }  

 

 

拦截器由spring管理,只对action起作用,不能拦截jsp页面、图片等其他资源。拦截器截获用户对action的访问,如需要跳转,只需如action一样返回一个result,spring根据result的配置执行跳转。如无需跳转,可调用invocation.invoke();方法来执行用户请求的action。拦截器在action之前开始,在action完成后结束(如被拦截,action根本不执行)

 

 

如不进行处理,过滤器和拦截器都会将正常的登录操作屏蔽,因此过滤器中需要判断用户访问的url是否为登录操作或登录页面,拦截器中需要判断用户访问的action是否登录action。(暂未考虑其他区分方法,留问。)

分享到:
评论

相关推荐

    zhuan 2.zip

    这个程序的核心是通过JavaScript实现,使得用户可以通过点击来触发抽奖过程,从而增加用户体验的趣味性和参与度。 首先,我们来看“转盘抽奖”的概念。转盘抽奖是一种随机选取获奖者的机制,通常由一个圆形的界面...

    zhuan_java_untilgw8_android_

    标题 "zhuan_java_untilgw8_android_" 暗示了这是一个关于使用Java语言在UntilGW8平台上开发Android游戏的项目,特别是一款简单的打砖块游戏。在这个项目中,我们可以深入学习到Java编程语言、Android应用开发的基础...

    gssdgv-zhuan-ke-master_java_

    《蚂蚁集团开源的Java研发框架——gssdgv-zhuan-ke-master_java_详解》 在现代软件开发中,高效、稳定且易维护的框架是项目成功的关键因素之一。蚂蚁集团作为全球知名的金融科技公司,其开源的Java研发框架——...

    Map_out.rar_Map o_mapgis_mapgis noteo_mapgis zhuan jpg_out

    标题中的"Map_out.rar"可能是指一个RAR压缩文件,它包含了一个名为"Map_out"的文件或目录。"Map o_mapgis_mapgis noteo_...通过这样的开发,用户可以更方便地分享和展示MapGIS地图,同时降低了对专业GIS软件的依赖。

    XUAN-ZHUAN-led.zip_旋转LED_旋转LED 自适应_自适应旋转LED

    在IT行业中,旋转LED是一种常见的显示技术,常用于广告牌、显示屏等场合,...通过分析和优化这段代码,我们可以学习到如何在硬件限制下实现高效、稳定的实时控制系统,这对于嵌入式系统开发者来说是一项宝贵的技能。

    zhuan-su-eliang.rar_labview 测_labview 测速_labview测速_labview转速测量_转

    在给定的“zhuan-su-eliang.rar”压缩包中,包含了一个名为“zhuan su eliang.vi”的虚拟仪器(VI),这显然是一款用于转速测量的应用程序。 转速测量是机械工程、汽车工业、电力系统等领域中常见的技术需求。...

    z zhuan sec_EH4_EH4Z文件转SEC文件_

    EH4和EH4Z文件格式是恩智浦(NXP)半导体公司为其微控制器产品(如LPC系列)所使用的固件文件格式。这些文件包含了可以烧录到微控制器闪存中的机器代码和数据,用于执行特定功能。而SEC(Secure Executable)文件...

    自媒体新媒体软件工具自媒体zhuan钱秘诀资料

    自媒体新媒体软件工具自媒体zhuan钱秘诀资料

    soho网络zhuan钱的体会.doc

    2. 网络建设与营销知识:这包括SEO(搜索引擎优化)、SEM(搜索引擎营销)、SMM(社交媒体营销)等,通过这些手段提高网站的可见性和用户吸引力,从而增加流量和潜在客户。 3. 经商之道:SOHO者不仅是技术执行者,...

    ban-zhuan.zip_JAVA穷举法搬砖_搬砖_用JAVA穷举法

    在给定的“ban-zhuan.zip_JAVA穷举法搬砖”主题中,我们面对的是一个数学问题,该问题与实际的砖块分配有关。36块砖需要36个人来搬运,其中包括男性、女性和小孩,他们各自有不同的搬运能力。男性每次能搬4块砖,...

    office2003转2007

    这可能是通过安装一个转换工具,如Microsoft的“Microsoft Office Compatibility Pack”,它允许Office 2003用户打开、编辑和保存2007及更高版本的文件格式。 压缩包子文件的文件名为“office2003转2007.exe”,这...

    一款新闻软件

    开发者可以通过这些内容了解软件的实现细节,包括界面布局、业务逻辑和数据处理等方面。 总之,这款“新闻软件”是一个综合性的Android应用,涵盖了用户认证、数据管理、搜索功能等多个方面,对于学习Android开发的...

    ATM自动取款机,模拟程序

    - **主类**:`ATM`类作为程序的主类,继承自`JFrame`,负责整个界面的设计和功能逻辑的实现。 - **界面设计**: - 定义了多个`JPanel`组件来布局界面的不同部分。 - 使用`JLabel`来显示文本信息,如欢迎信息、提示...

    pdfzhuantxt.rar_pdf txt_pdf zhuan txt_pdfzhuant_pdf转txt_txt转pdf

    这个名为“pdfzhuantxt.rar”的压缩包提供了一个小程序,能够帮助用户将PDF文件转换为纯文本(TXT)格式。PDF(Portable Document Format)是Adobe公司开发的一种文件格式,它能够保持文档的原始布局和样式,而TXT...

    PDF转换成word.

    - **第二步**:如果在“打印机”下拉列表中找不到“Microsoft Office Document Image Writer”,说明未安装该组件,需通过Office 2003安装光盘进行安装。 - **第三步**:运行Microsoft Office Document Imaging,...

    java swing写成的接球小游戏

    Java Swing 是Java GUI(图形用户界面)开发的一个重要库,它是Java AWT(抽象窗口工具包)的扩展,提供了更多的组件和功能。在这个接球小游戏中,开发者利用Swing构建了一个交互式的用户界面,让用户可以通过点击...

    ann(zhuan).rar_ANN

    本人转的别人写的人工神经网络的学习体会与感受,真是受益匪浅啊!

    2.6.14 内核移植说明文档(zhuan)

    - 接着进入`NAND Flash Device Drivers`配置界面,确保已经启用了NAND设备支持(`[*] NAND Device Support`)和针对S3C2410/S3C2440的NAND Flash支持(`[*] NAND Flash support for S3C2410/S3C2440 SoC`)。...

    zhuan-kai-fa

    标题“zhuan-kai-fa”似乎是在简写或拼音化表示“专开发”,这可能是指专门的软件开发或者技术开源项目。由于没有具体的标签信息,我们将从一般软件开发的角度来探讨相关知识点。 在软件开发领域,"专开发"可以涵盖...

    安卓FragmentTab选项卡相关-fragmenttabhost实现底部菜单.zip

    这个压缩包文件"安卓FragmentTab选项卡相关-fragmenttabhost实现底部菜单.zip"包含了一些示例代码,帮助开发者理解和实践如何使用FragmentTabHost来构建应用程序的底部菜单。 FragmentTabHost是Android SDK中的一个...

Global site tag (gtag.js) - Google Analytics