Struts2的权限拦截代码

package cn.erp.utils.interceptor;

import cn.erp.auth.emp.vo.Emp;
import cn.erp.auth.res.business.IResourceService;
import cn.erp.auth.res.vo.Resource;
import cn.erp.utils.exception.CustomException;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import org.apache.struts2.ServletActionContext;

import java.util.List;

/**
 * 描述:权限校验
 */
public class AuthInterceptor extends AbstractInterceptor {

    @javax.annotation.Resource(name = IResourceService.SERVICE_NAME)
    private IResourceService resourceService;

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        /**
         * 1.获取本次操作
         * 2.从session中获取当前登录人信息
         *  2.1如果当前登录人信息为null,跳转到登录页面
         * 3 获取当前登录人可执行的所有操作(资源-->角色-->员工)
         * 4 判断当前登录人对应的所有可操作资源中是否包含本次操作
         * 4.1 如果不包含,拦截
         */
        //1.获取本次操作
        String actionName = invocation.getProxy().getAction().getClass().getName();
        String methodName = invocation.getProxy().getMethod();
        String allName = actionName+"."+methodName;

        //获取所有的资源信息,比对本次操作是否在资源全列表中,如果出现了,需要拦截,否则直接放行
        List<Resource> rs = resourceService.getAll();
        //list-->stringbuilder
        StringBuffer sbf = new StringBuffer();
        for(Resource r :rs){
            sbf.append(r.getUrl()).append(",");
        }
        //sbf中保存有需要校验的资源
        if(sbf.indexOf(allName) < 0){
            return invocation.invoke();
        }

        //2.从session中获取当前登录人信息
        Emp emp = (Emp) ServletActionContext.getRequest().getSession().getAttribute("emp");
        //2.1如果当前登录人信息为null,跳转到登录页面
        if(emp == null){
            return "noLogin";
        }
        //3 获取当前登录人可执行的所有操作(资源-->角色-->员工)
        List<Resource> resources = resourceService.getAllResourcesByEmpId(emp.getUuid());
        for (Resource r :resources){
            if(r.getUrl().equals(allName)){
                //放行
                return invocation.invoke();
            }
        }
        throw new CustomException("抱歉,权限不足");

    }
}
时间: 2024-10-17 18:00:12

Struts2的权限拦截代码的相关文章

Struts2(十四)拦截器实现权限管理

一.认识拦截器 拦截器也是一个类 拦截器可以在Action被调用之前和之后执行代码 框架很多核心功能是拦截器实现的 拦截器的特点: 拦截器自由组合,增强了灵活性.扩展性.有利于系统解耦 拦截器可以拦截Action请求 在访问的Action执行之前和执行之后执行代码实现某项功能 Struts2: 大部分功能是在拦截器中实现的如:接收输入的参数,数据验证,文件上传,国际化等 应用程序: 需要在Action执行的前后执行特定功能 Action执行时间统计,Action访问权限管理 Action添加功能

Struts2自己定义拦截器实例—登陆权限验证

版本号:struts2.1.6 此实例实现功能:用户须要指定username登陆,登陆成功进入对应页面运行操作,否则返回到登陆页面进行登陆,当直接訪问操作页面(登陆后才干訪问的页面)时则不同意,须返回登陆页面. 代码例如以下: 一.页面 login.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUB

struts2内置拦截器和自定义拦截器详解(附源码)

一.Struts2内置拦截器 Struts2中内置类许多的拦截器,它们提供了许多Struts2的核心功能和可选的高级特 性.这些内置的拦截器在struts-default.xml中配置.只有配置了拦截器,拦截器才可以正常的工作和运行.Struts 2已经为您提供丰富多样的,功能齐全的拦截器实现.大家可以至struts2的jar包内的struts-default.xml查看关于默认的拦截器与 拦截器链的配置.内置拦截器虽然在struts2中都定义了,但是并不是都起作用的.因为并不是所有拦截器都被加

好记性不如烂笔头49-javaWeb框架struts2中的拦截器(4)

1. Struts2的拦截器概述 Struts2拦截器是在访问某个Action或Action的某个方法之前拦截,或者在运行之后处理.Struts2拦截器是可插拔的,拦截器是AOP(Aspect Oriented Programming,面向切面编程)的一种实现 Struts2的拦截器栈(InterceptorStack)就是将拦截器按一定的顺序联结成一条链.在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用. Struts2规定用户自定义拦截器必须实现com

关于struts2的自定义拦截器和struts2的详细流程

1.其实我们大家平常都会用struts2用的很多,但是有的时候我们并不是真正的了解struts2的运行机制,下面给大家分享一下struts2的运行流程.MVC框架 解释如下: 1.  所有请求被Struts2核心控制器StrutsPreparaedAndExecuteFilter拦截 2.根据ActionMapper提供的信息决定如何进行下一步 3.ActionMapper主要依赖Struts2的配置文件struts.xml 4.接下来为每个Action创建Action代理类ActionProx

(转)关于struts2的自定义拦截器和struts2的详细流程

转自 http://www.94cto.com/index/Article/content/id/63218.html.话说,写的真不错. 1.其实我们大家平常都会用struts2用的很多,但是有的时候我们并不是真正的了解struts2的运行机制,下面给大家分享一下struts2的运行流程.MVC框架 解释如下: 1. 所有请求被Struts2核心控制器StrutsPreparaedAndExecuteFilter拦截 2.根据ActionMapper提供的信息决定如何进行下一步 3.Actio

基于Springmvc的登录权限拦截器

1.什么是拦截器 拦截器是指通过统一拦截从浏览器发往服务端的请求来完成功能的增强. 使用场景:解决请求的共性问题(如:乱码问题,权限验证问题等) 2.拦截器的基本工作原理 springmvc可以通过配置过滤器来解决乱码问题 拦截器的工作原理和过滤器非常相似 3.实现拦截器 (1)编写拦截器类实现HandlerInterceptor接口 (2)将拦截器注册进Springmvc框架中 4.拦截器的方法介绍 (1)preHandle方法,在请求被处理之前进行调用(返回值:表示我们是否需要将当前的请求拦

java struts2入门学习---拦截器学习

转发: https://www.cnblogs.com/amosli/p/3521872.html 一.拦截器,拦截器栈 1.拦截器的作用 拦截器本质上和servlet的过滤器是一样的.在struts2中,拦截器能够对Action前后进行拦截,拦截器是一个可插拨的,你可以选择使用拦截器,也可以卸载拦截器. 2.拦截器执行顺序 在struts.xml文件中,<intercepto-ref/>中先引用的先执行,后引用的后执行.如果某个拦截器出错或不允许通过,那么下一个拦截器是不允许执行的. 需要拦

struts2入门之拦截器

1.拦截器的执行时间:在action对象创建之后,在具体的方法执行之前: 2.拦截器底层实现原理:用到AOP思想和责任链模式:AOP:面向切面编程,通俗的讲就是当某个功能模块要增加某一项功能时,尽可能不去修改源代码而是通过其他的方式来达到相同的效果,比如通过配置文件等方式:责任链模式和过滤链模式有点相似,过滤链模式是指比如,一个请求由多个过滤器进行过滤,每个过滤器进行放行之后才能到下一个过滤器,最后实现目的:但是责任链模式,比如要执行多个操作,有添加,修改,删除三个操作,首先执行添加操作,添加操