转自:
http://blog.csdn.net/zlcoy_1/article/details/5009198
需要实现的功能:判断用户是否已登录,未登录用户禁止访问任何页面或action,自动跳转到登录页面。
过程:因为对过滤器和拦截器都不熟悉,开始两种方式都问题不断,后调试通过,贴在这里留作小结和备忘
过滤器filter实现
配置:web.xml
- <filter>
- <filter-name>RightFilter</filter-name>
- <filter-class>com.***.rights.RightFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>RightFilter</filter-name>
- <url-pattern>*.jsp</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>RightFilter</filter-name>
- <url-pattern>*.action</url-pattern>
- </filter-mapping>
代码:
- mport 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;
- import javax.servlet.http.HttpSession;
-
- public class RightFilter extends HttpServlet implements Filter {
-
- public void doFilter(ServletRequest arg0, ServletResponse arg1,
- FilterChain arg2) throws IOException, ServletException {
- HttpServletResponse response = (HttpServletResponse) arg1;
- HttpServletRequest request=(HttpServletRequest)arg0;
- HttpSession session = request.getSession(true);
- String usercode = (String) session.getAttribute("usercode");
- String url=request.getRequestURI();
- if(usercode==null || usercode.equals(""))
- {
-
- if(url!=null && !url.equals("") && ( url.indexOf("Login")<0 && url.indexOf("login")<0 ))
- {
- response.sendRedirect("登录路径");
- return ;
- }
- }
-
- arg2.doFilter(arg0, arg1);
- return;
- }
-
- public void init(FilterConfig arg0) throws ServletException {
-
-
- }
配置中的filter-mapping,定义的是需过滤的请求类型,上面的配置即过滤所有对jsp页面和action的请求。过滤器的实现与struts2、spring框架无关,在用户请求被相应前执行,在过滤器中,可使用response.sendRedirect("")等方法
跳转到需要的链接,如登录页面、错误页面等,不需要跳转时,arg2.doFilter(arg0, arg1);即可继续执行用户的请求。注意使用filter时避免连续两次跳转,否则会报java.lang.IllegalStateException错误,具体配置方法网上有,除非必要,不建议使用/*(过滤所有访问)的配置方式,这样配置,图片、js文件、css文件等访问都会被过滤
拦截器interceptor实现:
配置:struts.xml
- <interceptors>
-
- <interceptor class="com.***.rights.RightInterceptor" name="rightInterceptor"/>
-
- <interceptor-stack name="mydefault">
-
- <interceptor-ref name="defaultStack"/>
-
- <interceptor-ref name="rightInterceptor"/>
- </interceptor-stack>
- </interceptors>
- <default-interceptor-ref name="mydefault" />
-
- <global-results>
- <result name="login">Login.jsp</result>
- <result name="error">/error.jsp </result>
- </global-results>
代码:
- import java.util.HashMap;
- import java.util.Map;
- import com.opensymphony.xwork2.Action;
- import com.opensymphony.xwork2.ActionInvocation;
- import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
- import com.opensymphony.xwork2.ActionContext;
- public class RightInterceptor extends AbstractInterceptor {
-
- @Override
- public String intercept(ActionInvocation invocation) throws Exception {
-
- try
- {
- ActionContext actionContext = ActionContext.getContext();
- Map<String,Object> session = actionContext.getSession();
- String user=session.get("usercode").toString();
-
- if((user==null || user.equals("")) && !invocation.getAction().getClass().getName().equals("登录action"))
- {
- return Action.LOGIN;
- }
- }
- catch(Exception e)
- {
- e.printStackTrace();
- return Action.LOGIN;
- }
-
- return invocation.invoke();
-
-
- }
-
- }
拦截器由spring管理,只对action起作用,不能拦截jsp页面、图片等其他资源。拦截器截获用户对action的访问,如需要跳转,只需如action一样返回一个result,spring根据result的配置执行跳转。如无需跳转,可调用invocation.invoke();方法来执行用户请求的action。拦截器在action之前开始,在action完成后结束(如被拦截,action根本不执行)
如不进行处理,过滤器和拦截器都会将正常的登录操作屏蔽,因此过滤器中需要判断用户访问的url是否为登录操作或登录页面,拦截器中需要判断用户访问的action是否登录action。(暂未考虑其他区分方法,留问。)
分享到:
相关推荐
这个程序的核心是通过JavaScript实现,使得用户可以通过点击来触发抽奖过程,从而增加用户体验的趣味性和参与度。 首先,我们来看“转盘抽奖”的概念。转盘抽奖是一种随机选取获奖者的机制,通常由一个圆形的界面...
标题 "zhuan_java_untilgw8_android_" 暗示了这是一个关于使用Java语言在UntilGW8平台上开发Android游戏的项目,特别是一款简单的打砖块游戏。在这个项目中,我们可以深入学习到Java编程语言、Android应用开发的基础...
《蚂蚁集团开源的Java研发框架——gssdgv-zhuan-ke-master_java_详解》 在现代软件开发中,高效、稳定且易维护的框架是项目成功的关键因素之一。蚂蚁集团作为全球知名的金融科技公司,其开源的Java研发框架——...
标题中的"Map_out.rar"可能是指一个RAR压缩文件,它包含了一个名为"Map_out"的文件或目录。"Map o_mapgis_mapgis noteo_...通过这样的开发,用户可以更方便地分享和展示MapGIS地图,同时降低了对专业GIS软件的依赖。
在IT行业中,旋转LED是一种常见的显示技术,常用于广告牌、显示屏等场合,...通过分析和优化这段代码,我们可以学习到如何在硬件限制下实现高效、稳定的实时控制系统,这对于嵌入式系统开发者来说是一项宝贵的技能。
在给定的“zhuan-su-eliang.rar”压缩包中,包含了一个名为“zhuan su eliang.vi”的虚拟仪器(VI),这显然是一款用于转速测量的应用程序。 转速测量是机械工程、汽车工业、电力系统等领域中常见的技术需求。...
EH4和EH4Z文件格式是恩智浦(NXP)半导体公司为其微控制器产品(如LPC系列)所使用的固件文件格式。这些文件包含了可以烧录到微控制器闪存中的机器代码和数据,用于执行特定功能。而SEC(Secure Executable)文件...
自媒体新媒体软件工具自媒体zhuan钱秘诀资料
2. 网络建设与营销知识:这包括SEO(搜索引擎优化)、SEM(搜索引擎营销)、SMM(社交媒体营销)等,通过这些手段提高网站的可见性和用户吸引力,从而增加流量和潜在客户。 3. 经商之道:SOHO者不仅是技术执行者,...
在给定的“ban-zhuan.zip_JAVA穷举法搬砖”主题中,我们面对的是一个数学问题,该问题与实际的砖块分配有关。36块砖需要36个人来搬运,其中包括男性、女性和小孩,他们各自有不同的搬运能力。男性每次能搬4块砖,...
这可能是通过安装一个转换工具,如Microsoft的“Microsoft Office Compatibility Pack”,它允许Office 2003用户打开、编辑和保存2007及更高版本的文件格式。 压缩包子文件的文件名为“office2003转2007.exe”,这...
开发者可以通过这些内容了解软件的实现细节,包括界面布局、业务逻辑和数据处理等方面。 总之,这款“新闻软件”是一个综合性的Android应用,涵盖了用户认证、数据管理、搜索功能等多个方面,对于学习Android开发的...
- **主类**:`ATM`类作为程序的主类,继承自`JFrame`,负责整个界面的设计和功能逻辑的实现。 - **界面设计**: - 定义了多个`JPanel`组件来布局界面的不同部分。 - 使用`JLabel`来显示文本信息,如欢迎信息、提示...
这个名为“pdfzhuantxt.rar”的压缩包提供了一个小程序,能够帮助用户将PDF文件转换为纯文本(TXT)格式。PDF(Portable Document Format)是Adobe公司开发的一种文件格式,它能够保持文档的原始布局和样式,而TXT...
- **第二步**:如果在“打印机”下拉列表中找不到“Microsoft Office Document Image Writer”,说明未安装该组件,需通过Office 2003安装光盘进行安装。 - **第三步**:运行Microsoft Office Document Imaging,...
Java Swing 是Java GUI(图形用户界面)开发的一个重要库,它是Java AWT(抽象窗口工具包)的扩展,提供了更多的组件和功能。在这个接球小游戏中,开发者利用Swing构建了一个交互式的用户界面,让用户可以通过点击...
本人转的别人写的人工神经网络的学习体会与感受,真是受益匪浅啊!
- 接着进入`NAND Flash Device Drivers`配置界面,确保已经启用了NAND设备支持(`[*] NAND Device Support`)和针对S3C2410/S3C2440的NAND Flash支持(`[*] NAND Flash support for S3C2410/S3C2440 SoC`)。...
标题“zhuan-kai-fa”似乎是在简写或拼音化表示“专开发”,这可能是指专门的软件开发或者技术开源项目。由于没有具体的标签信息,我们将从一般软件开发的角度来探讨相关知识点。 在软件开发领域,"专开发"可以涵盖...
这个压缩包文件"安卓FragmentTab选项卡相关-fragmenttabhost实现底部菜单.zip"包含了一些示例代码,帮助开发者理解和实践如何使用FragmentTabHost来构建应用程序的底部菜单。 FragmentTabHost是Android SDK中的一个...