struts2利用拦截器和注解进行权限控制

wuxp 贡献于2014-05-21

作者 雨林木风  创建于2011-07-23 04:29:00   修改者雨林木风  修改于2011-07-23 04:35:00字数3535

文档摘要:struts2利用拦截器和注解进行权限控制
关键词:

struts2利用拦截器和注解进行权限控制   基本是在每个方法上加入注入来进行控制,有点像asp 脚本语言 Java代码 package auth;    import java.lang.annotation.ElementType;    import java.lang.annotation.Retention;    import java.lang.annotation.RetentionPolicy;    import java.lang.annotation.Target;   package auth; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) //指定该注解是在运行期进行    @Target({ElementType.METHOD}) //指定该注解要在方法上使用    public @interface AuthName {      String value() default "";    }   @Retention(RetentionPolicy.RUNTIME)//指定该注解是在运行期进行 @Target({ElementType.METHOD})//指定该注解要在方法上使用 public @interface AuthName {   String value() default ""; } package auth;    import java.lang.reflect.Method;       public class ParseAuthName {       public static String parseAuthentication(Class clazz, String methodName,Class... parameterTypes)  throws NoSuchMethodException {            //根据方法名,取得方法,如果有则返回            Method method = clazz.getMethod(methodName, parameterTypes);            if (null != method) {                AuthName authName = method.getAnnotation(AuthName.class);                if (null != authName) {                    return authName.value();                }            }            return null;        }    }   package auth; import java.lang.reflect.Method; public class ParseAuthName { public static String parseAuthentication(Class clazz, String methodName,Class... parameterTypes) throws NoSuchMethodException { //根据方法名,取得方法,如果有则返回 Method method = clazz.getMethod(methodName, parameterTypes); if (null != method) { AuthName authName = method.getAnnotation(AuthName.class); if (null != authName) { return authName.value(); } } return null; } } 下面是struts的拦截器 Java代码 package auth;    import com.opensymphony.xwork2.ActionContext;    import com.opensymphony.xwork2.ActionInvocation;    import com.opensymphony.xwork2.ActionProxy;    import com.opensymphony.xwork2.interceptor.AbstractInterceptor;       public class AuthInterceptor extends AbstractInterceptor {        @Override       public String intercept(ActionInvocation invocation) throws Exception {            ActionContext context = invocation.getInvocationContext();            String user = (String)context.getSession().get("user") == null ? "tom" : "tom";                     ActionProxy proxy = invocation.getProxy();            String methodName = proxy.getMethod();            Object action = proxy.getAction();            String auth = null;                 try{                auth = ParseAuthName.parseAuthentication(action.getClass(),methodName, null);            }catch(NoSuchMethodException  ex) {                ex.printStackTrace();                return "nopermisses";            }            if (null != auth) {                if ("AUTH".equals(auth)) {                    return invocation.invoke();                }            }            return "nopermisses";               } } package auth; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ActionProxy; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class AuthInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { ActionContext context = invocation.getInvocationContext(); String user = (String)context.getSession().get("user") == null ? "tom" : "tom"; ActionProxy proxy = invocation.getProxy(); String methodName = proxy.getMethod(); Object action = proxy.getAction(); String auth = null; try{ auth = ParseAuthName.parseAuthentication(action.getClass(),methodName, null); }catch(NoSuchMethodException ex) { ex.printStackTrace(); return "nopermisses"; } if (null != auth) { if ("AUTH".equals(auth)) { return invocation.invoke(); } } return "nopermisses"; } } 写一个action进行测试: Java代码 public class UserListAction extends ActionSupport{          @AuthName(value = "admin")          public String execute() {            return SUCCESS;        }       }   public class UserListAction extends ActionSupport{ @AuthName(value = "admin") public String execute() { return SUCCESS; } } struts.xml文件基本配置:   Xml代码                                                                                                                                                                             /default.jsp               /sss.jsp                                                /default.jsp /sss.jsp  web.xml文件 ,我用的是tomcat7 + servlet3.0   Xml代码                         struts-cleanup       org.apache.struts2.dispatcher.ActionContextCleanUp                       struts2       org.apache.struts2.dispatcher.FilterDispatcher                 actionPackages                         action                                  struts2       /*                       struts-cleanup       *.action                        index.jsp       

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档