zoukankan      html  css  js  c++  java
  • Struts2的拦截器只允许有权限用户访问action

    1、定义拦截器,继承MethodFilterInterceptor 

    package com.life.stuts.interceptor;
    
    import java.util.Map;
    
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
    
    /**
     * 如果不是login的adction,使用自定义拦截器判断用户是否为空。为空,跳转到登陆页面;否则,继续执行。
     * 在配置拦截器属性excludeMethods、includeMethods进行方法过滤时发现不起作用。
     * 要想使方法过滤配置起作用,拦截器需要继承MethodFilterInterceptor类。
     * MethodFilterInterceptor类是AbstractInterceptor的子类
     * @author JL
     * 
     */
    
    public class SellerInterceptor extends MethodFilterInterceptor {
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
    
        @Override
        protected String doIntercept(ActionInvocation invocation) throws Exception {
            // TODO Auto-generated method stub
            Map<String, Object> sessionValues = invocation.getInvocationContext()
                    .getSession();
            String seller = (String) sessionValues.get("seller");
            // 如果没有管理员登陆或商家登陆,就返回到登陆页面,否则继续访问原action
            System.out.println("action拦截器");
            if (seller == null) {
                return "loginscript";
            }
            return invocation.invoke();
        }
    
    }

    2、struts.xml的配置,希望对那个action进行拦截就把interceptor 放里面,要加上defaultStack。

            <interceptors>
                <interceptor name="authentication"
                    class="com.life.stuts.interceptor.AuthenticationInterceptor"></interceptor>
            </interceptors>
    <global-results>
                <result name="login">/</result>
            </global-results>
    <action name="*_manage" method="{1}" class="ManageAction">
                <!-- param是K-V形式,在action的类文件中调用,前提是类中有这样一个变量,并且提供get-set方法 -->
                <interceptor-ref name="authentication"></interceptor-ref>
                <!-- 在配置了其它拦截器之后,必须加上defaultStack,否则jsp无法向action传值 ,且文件上传也失效 -->
                <interceptor-ref name="defaultStack"></interceptor-ref>
            </action>

     3、实现对action的某些方法不拦截

    excludeMethods表示不进行拦截

    includeMethods表示要拦截

    <interceptor-ref name="sellerauthentication">
                    <param name="includeMethods"></param>
                    <param name="excludeMethods">login,logout</param>
                </interceptor-ref>

    Done

  • 相关阅读:
    flask框架中SQLAlchemy相关
    flask使用外部存储模块之数据库的使用
    flask的基础知识
    docker的下载和使用
    rbac权限管理系统的学习
    redis数据库之五种数据类型的简单操作
    使用django框架进行web项目开发需要了解的知识
    django项目常用外部模块下载和使用
    pwn学习之dl_resolve学习篇
    验证docker的Redis镜像也存在未授权访问漏洞
  • 原文地址:https://www.cnblogs.com/xingyyy/p/3896831.html
Copyright © 2011-2022 走看看