package util; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.regex.Pattern; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.MethodUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; public class ActionFilter implements Filter { private ServletContext context; static Logger log = Logger.getLogger(ActionFilter.class); @Override public void init(FilterConfig cfg) throws ServletException { this.context = cfg.getServletContext(); } @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; RequestContext rc = RequestContext.begin(this.context, request, response); String url = request.getRequestURI(); boolean flag = Pattern.compile("(.css|.js|.png|.gif|.jpg|.jpeg|.jsp|.html|.htm)$").matcher(url).find(); url = url.substring(request.getContextPath().length() + 1); try { if (url.length() == 0 || flag) { chain.doFilter(RequestContext.getRequest(), RequestContext.getResponse()); return; } else { boolean ignore = Pattern.compile("(common/vc|common/login|common/logout)$").matcher(url).find(); if (!ignore) { Object user = request.getSession().getAttribute("user"); if (user == null) { response.sendError(HttpServletResponse.SC_NOT_FOUND); return; } } String[] parts = StringUtils.split(url, '/'); if (parts.length < 1) { response.sendError(HttpServletResponse.SC_NOT_FOUND); return; } String action_name = StringUtils.capitalize(parts[0]) + "Action"; String action_method_name = (parts.length > 1) ? parts[1] : "execute"; Class<?> cls = Class.forName("action." + action_name); MethodUtils.invokeMethod(cls.newInstance(), action_method_name, null); } } catch (Exception e) { log.debug("Exception in action."); if (e instanceof ClassNotFoundException) { log.debug(e.getMessage() + " Not Found."); } else if (e instanceof NoSuchMethodException) { log.debug(e.getMessage()); } else if (e instanceof InvocationTargetException) { Throwable t = e.getCause(); log.debug(t.getMessage()); } else { throw new ServletException(e); } RequestContext.redirect(""); } finally { if (rc != null) { rc.end(); } } } @Override public void destroy() { } }
相关推荐
很抱歉,但根据您给出的信息,"最新ARI项目-乱"这一标题和描述并没有提供足够的具体IT知识内容,也没有明确的标签或压缩包子文件的详细信息来生成相关的IT知识点。通常,一个IT项目的描述可能包括使用的编程语言、...
1、文件内容:perl-Module-Runtime-0.013-4.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-Module-Runtime-0.013-4.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
"Comsol散射体BIC模型:2D演示的快速跟进,聚焦于2022年10月21日的新进展",Comsol散射体BIC。 新文章快速跟进,模型为2D演示。 2022 10 21 ,Comsol; 散射体; BIC; 模型; 2D演示; 2022年10月21日,"Comsol散射体模型:2022年10月21日快速跟进的2D演示"
Cocos游戏引擎开发一个简单的“点击小球”游戏教程
资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:29页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于B/S网络结构,在IDEA中开发。服务端用Java并借Spring Boot框架搭建后台。前台采用支持HTML5的VUE框架。用MySQL存储数据,可靠性强。 能学到什么: 使用Spring Boot搭建后台。VUE框架构建前端交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。
MATLAB TDOA定位仿真:15种解算方法与CRLB对比研究 参考多种文献资料,包括IEEE信号处理杂志的讲座笔记、国际通信会议论文集、IEEE信号处理和测量的交易期刊等。,【1】MATLAB TDOA求解定位仿真 多种方法解算 ,总15种方法,包含与CRLB对比。 方法参考文档: 1. Lecture notes - source localization from range-difference measurements. IEEE Signal Processing Magazine. 2. Semidefinite programming approaches for source localization problems. In 2014 IEEE International Conference on Communiction Problem-solving. 3. A Simple and Efficient Estimator for Hyperbolic Location, IEEE Trans. Signal Processing 4. Combine
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
"密歇根大学燃料电池系统Matlab Simulink模型:电堆、压缩机拟合及辅助模块的全面构建与解析",密歇根大学质子交膜燃料电池系统模型,matlab simulink模型 包含: 电堆模型。 压缩机拟合模型。 理想加湿器、冷却器模型。 阳极、阴极流道模型。 进排气总管模型。 包含模型1:1搭建过程文件。 每一个模块都有搭建过程,都有说明文件,中文wrod版。 附赠参考文。 ,关键词: 密歇根大学; 质子交换膜燃料电池系统模型; MATLAB Simulink模型; 电堆模型; 压缩机拟合模型; 理想加湿器、冷却器模型; 阳极、阴极流道模型; 进排气总管模型; 搭建过程文件; 说明文件; 附赠参考文。,"密歇根大学燃料电池系统模型:Matlab Simulink电堆与辅助组件模型集"
基于Matlab的程序化设计与优化:交直流混合微网系统的随机性建模与稳定运行策略研究,交直流混合微网 程序matlab 采用拉丁超立方抽样和多场景缩减,考虑风光等随机性建模,利用粒子群算法,计算得到三个微网的优化程序运行稳定,有详细资料。 ,交直流混合微网; MATLAB程序; 拉丁超立方抽样; 多场景缩减; 风光随机性建模; 粒子群算法; 微网优化运行稳定; 详细资料,Matlab实现:交直流混合微网优化程序稳定运行研究
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
Matlab
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
scratch
电脑调音软件下载是专为汽车音响爱好者和专业人士设计的一款强大工具, 这款软件的主要功能在于帮助用户对车载音频系统进行精确的数字信号处理,以提升音乐播放效果,提供更丰富的听觉体验。
ADMM算法在发电商竞标策略中的GAMS程序实现与参考指南,GAMS程序:ADMM算法-基于ADMM法的发电商竞标策略 本程序主要介绍ADMM算法在GAMS中的编写方式,模型基于发电商竞标策略进行编写,基本包含了文章中的模型,但并非完全复现,可作为参考程序自学使用,也可在程序的基础上进行修改使用。 需要的同学可根据以下图片研究是否为自己需要的程序进行。 也可提供ADMM部分程序。 程序包括两个,分别为解决战略投资问题的广义MILP制定的GAMS代码、基于提出的共识- admm算法解决战略投资问题的GAMS代码 ,GAMS程序; ADMM算法; 发电商竞标策略; 模型编写; MILP制定; 共识-ADMM算法; 战略投资问题; 程序修改。,"GAMS程序:ADMM算法在发电商竞标策略中的应用示例"
1、文件内容:perl-Carp-Clan-6.04-10.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-Carp-Clan-6.04-10.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
基于A*算法改进与拓展的3×3至5×5领域内的搜索优化策略,改进A*算法 扩展搜索领域a星算法,3×3 4×4 5×5领域 ,改进A*算法; 扩展搜索; a星算法; 3×3领域; 4×4领域; 5×5领域,改进A*算法在3×3至5×5领域扩展搜索范围的研究
dataease v2.1.11-devk开发项目