这是以前写过的一个利用struts2的interceptor进行权限管理的笔记,以前是放电脑上的,今天偶然看到了,就贴出来,希望能对有需要的人有点帮助,同时自己以后需要看的时候也会更加方便点!
说明一点:这个interceptor里面的代码是根据我特定的项目写的,所以请有需要的人不要盲目的照搬!
自己写一个interceptor,该interceptor继承interceptor接口,实现其中的intercept方法;然后在struts.xml
中进行配置,并把该interceptor置于默认的interceptor中,注意,这里在设置默认的intercept的时候
一定要加上原来的intercept,否则原来的就不可以用了,就不能用struts2了,具体来说是这样:
<interceptors> <interceptor name="authentication" class="com.tiantian.tiantian.web.interceptor.AuthenticationInterceptor"></interceptor> <interceptor-stack name="myInterceptorStack"> <interceptor-ref name="authentication"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="myInterceptorStack"/>
@Override public String intercept(ActionInvocation invoke) throws Exception { // TODO Auto-generated method stub HttpSession session = ServletActionContext.getRequest().getSession(); String actionName = invoke.getProxy().getActionName();//获取action的名称 String methodName = invoke.getProxy().getMethod();//获取执行的方法 if ("execute".equals(methodName)) methodName = "index"; int index = actionName.indexOf("/"); String name = actionName.substring(0, index); //priorityService通过Spring注入 Priority priority = priorityService.find(name, methodName); Object obj = session.getAttribute("user"); if (obj != null) { User currentUser = (User) obj; //moduleService利用Spring注入 Module module = moduleService.findByUrl(name+"/"+methodName); if (module != null) { //sdService通过Spring注入 SystemDiary diary = new SystemDiary(); diary.setOperator(currentUser); diary.setOperateModule(module.getName()); sdService.add(diary); } if (priority != null) { boolean hasPermission = currentUser.hasPermission(priority); if (!hasPermission) { return "forbidden"; } } } // System.out.println("name = "+name + "**actionName = "+actionName+"*methodName = "+methodName); String result = invoke.invoke(); return result; }