题记:写这篇博客要主是加深自己对拦截器权限控制的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢。
有时候我要需在几个包下都要需停止同一个权限制控。如在购物站网中,我们要需进入个人心中、下订单、评价
商品等等都要需停止录登权限制控,但是这几个块模并非位于同一个package下。Struts供给的拦截器,我们可以实
现action下拦截,我们虽然可以在个一每package都配置这个拦截器,但是是当相的费事。这个时候我们可以利用拦
截器实现拦击package。将要需停止权限制控package放入拦截器中就可以实现了。
首先我们要需在struts.xml下停止拦截器的配置。
<package name="main" extends="struts-default"> <interceptors> <interceptor name="authorizationInterceptor" class="syxh.common.aop.SystemInterceptor"></interceptor> <interceptor-stack name="jwzhptStack"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="authorizationInterceptor"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="jwzhptStack" /> <global-results> <result name="loginfailure" type="redirectAction"> <param name="namespace">/index</param> <param name="actionName">index</param> </result> </global-results> <global-exception-mappings> <exception-mapping result="input" exception="*">/login.jsp</exception-mapping> </global-exception-mappings> </package>
下面配置的main ,所以的package都要继承main,即:extends=”main”,否则实现不了。
在struts.xml中,使用了拦截器栈,面里包括两个拦截器,一个是默许的defaultStack,一个是停止权限制控的
authorizationInterceptor。
拦截器实现类:SystemInterceptor.java
public class SystemInterceptor extends AbstractInterceptor{ private static final long serialVersionUID = -1819593755738908387L; private static final String WITHOUT = "/index, /author, /common, /indexzp"; //不要需停止权限制控的namespace public void destroy(){ } public void init(){ } public String intercept(ActionInvocation invocation) throws Exception{ String namespace = invocation.getProxy().getNamespace(); //取获namespace if (WITHOUT.indexOf(namespace) >= 0){ return invocation.invoke(); } Map<?, ?> session = invocation.getInvocationContext().getSession(); UserBean user = (UserBean) session.get("currentUser"); if (user == null){ //没有录登 return "loginfailure"; } return invocation.invoke(); //已录登 } }
下面的拦截器实现类,指定了几个namespace是不要需停止权限制控的,除此之外其他的namespace都要停止
权限制控。
其他package只要需继承main既可实现权限制控。
<package name="user" namespace="/user" extends="main"> <action name="userCenter_*" class="syxh.grzx.action.UserCenterAction" method="{1}"> <result name="updatePasswordUI">/jsp/grzx/updatePassword.jsp</result> <result name="updateError">/jsp/grzx/updatePassword.jsp</result> <result name="updateSuccess" type="redirect">/zp/myWorksHome.action</result> <result name="updatePhoteUI">/jsp/grzx/updatePhoto.jsp</result> <result name="updateInfoUI">/jsp/grzx/updateInfo.jsp</result> </action> </package>
注:由于这个拦截器主要是根据namespace来停止制控的,所以在配置package,要添加namespace。
文章结束给大家分享下程序员的一些笑话语录: 3G普不普及现在已经不是看终端了,而是看应用,有好的,便宜实用的应用,花1000多买个能用的智能手机应该不是什么难事。反过来说,你200元拿一个智能手机,没有好的应用,看个电影要几十元,也是没人用3G。