struts2--实现自定义拦截器

pecool 2018-02-07 原文

struts2–实现自定义拦截器

前言:

  本篇文章,我想说清实现拦截器的办法,还有为什么要这样做:

目录:

1.需求目的

2.实现步骤及原理(文字怕描述不清,画图描述)

3.代码

4.总结

一、需求目的

  规范或限制越级访问(例如:一个客户端,没有登录,直接发送了一个修改密码的action请求,或者直接退出系统,这些都可能造成bug,再或者直接访问一些资源文件)

二、实现步骤及原理(画图描述)

  第一步:写自己的拦截器

  

  第二步:配置struts.xml文件

   

三、代码

  第一步:写自己的拦截器

  

package com.catit.tms.filter;

import org.apache.struts2.ServletActionContext;
import com.catit.tms.domain.User;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

/**
 * 拦截action
 * @author phoebe
 *
 */
public class MyActionFilter extends MethodFilterInterceptor{
    private static final long serialVersionUID = 1L;

    @Override
    protected String doIntercept(ActionInvocation invocation) throws Exception {
        //获取用户是否登录
        User user = (User) ServletActionContext.getRequest().getSession().getAttribute("activeUser");
        if(user != null){
            //已登录放行
            return invocation.invoke();
        }
        //未登录,跳转到登录页面使其登录
        return "login";
    }
}

第二步:配置struts.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
    
    
<struts>
    <!-- 开发者模式打开可以提高开发效率,关闭不容易出错: -->
    <constant name="struts.devMode" value="false" />
    <package name="myStruts" extends="struts-default" namespace="/">
    
        <!-- 拦截器设置 -->
        <interceptors>
            <!-- 自定义拦截器 -->
            <interceptor name="myActionFilter" class="com.catit.tms.filter.MyActionFilter">
                <!-- 放行方法名为login的方法 -->
                <param name="excludeMethods">login</param>
            </interceptor>
            <!-- 自定义拦截器栈 -->
            <interceptor-stack name="selfStack">
                <!-- 必须引用struts-default.xml中的拦截器栈 -->
                <interceptor-ref name="defaultStack"></interceptor-ref>
                <!-- 自己的拦截器 -->
                <interceptor-ref name="myActionFilter"></interceptor-ref>
            </interceptor-stack>
        </interceptors>
        <!-- 配置全局拦截器为 -->
        <default-interceptor-ref name="selfStack"></default-interceptor-ref>
        <!-- 全局result -->
        <global-results>
            <result name="login">${pageContext.request.contextPath}/login.jsp</result>
        </global-results>
        
        <!-- 需要进行权限控制的页面访问 -->
        <action name="page_*_*">
            <interceptor-ref name="selfStack"></interceptor-ref>
            <result type="dispatcher">/WEB-INF/pages/{1}/{2}.jsp</result>
        </action>
        <!-- 用户 -->
        <action name="user_*" class="userAction" method="{1}">
            <result name="success" type="dispatcher">${pageContext.request.contextPath}/WEB-INF/pages/common/index.jsp</result>
        </action>
        
    </package>
</struts>

 

 

 四、总结

   1、实现拦截器有很多方法,根据需求不同选择继承或者实现接口也不相同

  2、includeMethods的优先级大于excludeMethods

 

发表于 2018-02-07 15:01 pecool 阅读() 评论() 编辑 收藏

 

版权声明:本文为pecool原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/pecool/p/8426673.html

struts2--实现自定义拦截器的更多相关文章

  1. Apache struts2 namespace远程命令执行_CVE-2018-11776(S2-057)漏洞复现

    Apache struts2 namespace远程命令执行_CVE-2018-11776(S2-057)漏洞 […]...

  2. ssh (Spring , Struts2 , Hibernate)框架的配置使用

    ssh (Spring , Struts2 , Hibernate)框架的配置使用 2018-03-07 11 […]...

  3. struts2 之 【struts2简介,struts2开发步骤,struts2详细配置,struts2执行流程】 – forever_2h

    struts2 之 【struts2简介,struts2开发步骤,struts2详细配置,struts2执行流 […]...

  4. JSP+Structs+JDBC+mysql实现的诚欣电子商城

    项目简介 项目来源于:https://github.com/SuperiorNature/Java-Enter […]...

  5. Struts2-整理笔记(五)拦截器、拦截器配置

    拦截器(Interceptor)  拦截器是Struts2最强大的特性之一,它是一种可以让用户在Action执 […]...

  6. Struts2拦截器再认识

    拦截器(Interceptor)是 Struts 2 的核心组成部分。 Struts2 很多功能都是构建在拦截 […]...

  7. Struts2的数据封装

    在很多的实际开发场景中,页面提交请求参数Action ,在Action中接收参数并对接收的数据进行封装。封装到 […]...

  8. Struts2学习笔记整理(一)

    最近在学习框架,很多人建议我直接学SSM,SSM看了一段时间后发现很多东西虽然可以用了,但是并不是很了解,所以 […]...

随机推荐

  1. [Ubuntu]管理开机启动项的软件

    sudo apt-get install sysv-rc-conf...

  2. 使用easypoi导出excel

    EasyPOI是在jeecg的poi模块基础上,继续开发独立出来的,可以说是2.0版本,EasyPoi封装的目 […]...

  3. Redis事件控制流分析

    一、概述 这里分析的主要是单机Redis服务器部分的事件控制流。本文配合Redis源码与《Redis设计与实现 […]...

  4. java关键字之abstract

    Java 允许类,借口或成员方法具有抽象属性。 abstract  修饰的类叫做抽象类,该类不能被实例化。 a […]...

  5. 图解 — Win10 OpenSSH

    一、安装OpenSSH 客户端 、OpenSSH 服务器 设置 -> 管理可选功能 -> 添加功能 […]...

  6. AI换脸

    AI换脸 技术 调用到百度的AI接口,layui的图片上传,栅格化布局 核心代码 纯py文件运行 # enco […]...

  7. Springboot+JPA下实现简易爬虫:豆瓣电视剧数据

    Springboot+JPA下实现简易爬虫:豆瓣电视剧数据   前言:今天听到产品那边讨论一些需求,好像其中一 […]...

  8. Restful API 接口设计标准及规范

    Restful API 接口设计标准以及规范 RESTful概念 理解和评估以网络为基础的应用软件的架构设计, […]...

展开目录

目录导航