Atitit.struts排除url 的设计and 原理 自定义filter 排除特定url
Atitit.struts排除url 的设计and 原理 自定义filter 排除特定url
1.1. 原理流程
读取struts配置xml文件内容
得到多个regexpress规则,匹配规则与uri
<constant name="struts.action.excludePattern" value="/com.attilax/core/approot_js.jsp,.*\.jsp,/api.jsp,/com\.attilax/.*,/static/.*,/dwr/.*,/dwr/test/.*,/spr/.*,/eqMntRun.jsp,/vod/eqMntRun.jsp,/comm/.*"></constant>
作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://www.cnblogs.com/attilax/
2. Invoke
/wxb_site/src/com/csmy/my/center/filter/RequestFilter.java
if(CTUtils.isEmpty(userInfo) && CTUtils.isEmpty(customerInfo) && isnotExtUrl(request)){//如果全部为空
if ((uri.indexOf("login") == -1) && !uri.equals(path + "/")) {
System.out.println("客户端未登录,请登录...");
PrintWriter out = response.getWriter();
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
if (uri.indexOf(".jsp") >= 0) {
System.out.println("截取jsp请求");
response.sendRedirect(path + "/login.htm");
return;
}
}
}
private boolean isnotExtUrl(HttpServletRequest request) {
String f = pathx.classPath() + "/struts.xml";
String pats =StrutsX. get_excludePattern(f);
return !new StrutsX().isUrlExcluded(request, pats);
}
3. StrutsX
/**
* @author attilax 老哇的爪子
@since o08 j_52_3$
*/
package com.attilax.util;
import com.attilax.core;
import com.attilax.exception.ExUtil;
import com.attilax.io.filex;
import com.attilax.io.pathx;
import static com.attilax.core.*;
import java.util.*;
import java.util.regex.Pattern;
import java.net.*;
import java.io.*;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.Dispatcher;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
/**
* @author attilax 老哇的爪子
* @since o08 j_52_3$
*/
public class StrutsX {
public static void main(String[] args) {
String f = pathx.classPath() + "/struts.xml";
String pats = get_excludePattern(f);
System.out.println(pats);
}
public static String get_excludePattern(String f) {
String t = filex.read(f);
org.dom4j.Document document;
try {
document = DocumentHelper.parseText(t);
Node root = document.getRootElement();
// root.selectNodes(arg0)
List<Element> nodes = ((Element) root).elements("constant");
for (Element e : nodes) {
if (e.attributeValue("name").equals(
"struts.action.excludePattern")) {
return e.attributeValue("value");
}
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
ExUtil.throwEx(e1);
}
return "";
}
public boolean isUrlExcluded(HttpServletRequest request, String patts) {
List<Pattern> excludedPatterns=buildExcludedPatternsList(patts);
if (excludedPatterns != null) {
String uri = (request.getRequestURI());
for (Pattern pattern : excludedPatterns) {
if (pattern.matcher(uri).matches()) {
return true;
}
}
}
return false;
}
public boolean isUrlExcluded(HttpServletRequest request,
List<Pattern> excludedPatterns) {
if (excludedPatterns != null) {
String uri = (request.getRequestURI());
for (Pattern pattern : excludedPatterns) {
if (pattern.matcher(uri).matches()) {
return true;
}
}
}
return false;
}
//public List<Pattern> buildExcludedPatternsList(Dispatcher dispatcher) {
//return buildExcludedPatternsList(dispatcher.getContainer().getInstance(
//String.class, StrutsConstants.STRUTS_ACTION_EXCLUDE_PATTERN));
//}
private List<Pattern> buildExcludedPatternsList(String patterns) {
if (null != patterns && patterns.trim().length() != 0) {
List<Pattern> list = new ArrayList<Pattern>();
String[] tokens = patterns.split(",");
for (String token : tokens) {
list.add(Pattern.compile(token.trim()));
}
return Collections.unmodifiableList(list);
} else {
return null;
}
}
/**
* @author attilax 老哇的爪子
* @since o08 j_52_a
*
* @return
*/
public static HttpServletRequest getReq() {
// attilax 老哇的爪子 j_52_a o08
return ServletActionContext.getRequest();
}
// attilax 老哇的爪子 j_52_3 o08
}
// attilax 老哇的爪子
paip.读取WEB.XML中的参数值总结 - attilax的专栏 - 博客频道 - CSDN.NET.htm
看struts2源码感之一:struts.action.excludePattern属性_「电脑玩物」中文网我们只是「电脑玩物」 -.htm
Atitit.struts排除url 的设计and 原理 自定义filter 排除特定url的更多相关文章
- atitit.ajax上传文件的实现原理 与设计
atitit.ajax上传文件的实现原理 与设计 1. 上传文件的三大难题 1 1.1. 本地预览 1 1.2. 无刷新 1 1.3. 进度显示 1 2. 传统的html4 + ajax 是无法直 ...
- Atitit。Tree文件解析器的原理流程与设计实现 java c# php js
Atitit.Tree文件解析器的原理流程与设计实现 java c# php js 1. 解析原理与流程1 1.1. 判断目录 ,表示服 dirFlagChar = "└├─&quo ...
- Atitit.数据库表的物理存储结构原理与架构设计与实践
Atitit.数据库表的物理存储结构原理与架构设计与实践 1. Oracle和DB2数据库的存储模型如图: 1 1.1. 2. 表数据在块中的存储以及RowId信息3 2. 数据表的物理存储结构 自然 ...
- Atitit.ioc 动态配置文件guice 设计原理
Atitit.ioc 动态配置文件guice 设计原理 1. Bat启动时注入配置文件1 2. ioc调用1 3. Ioc 分发器 配合 apche MethodUtils.invokeStatic ...
- dubbo源码解析五 --- 集群容错架构设计与原理分析
欢迎来我的 Star Followers 后期后继续更新Dubbo别的文章 Dubbo 源码分析系列之一环境搭建 博客园 Dubbo 入门之二 --- 项目结构解析 博客园 Dubbo 源码分析系列之 ...
- Atitit.软件架构高扩展性and兼容性原理与概论实践attilax总结
Atitit.软件架构高扩展性and兼容性原理与概论实践attilax总结 1. 什么是可扩展的应用程序?1 2. 松耦合(ioc)2 3. 接口的思考 2 4. 单一用途&模块化,小粒度化2 ...
- Atitit.在线充值功能的设计
Atitit.在线充值功能的设计 1. 流程1 2. Js sdk api 增加订单1 3. Java api 返回servlet处理1 3.1. 返回网址的本地host测试2 1. 流程 本地增 ...
- Atitit.病毒木马的快速扩散机制原理nio 内存映射MappedByteBuffer
Atitit.病毒木马的快速扩散机制原理nio 内存映射MappedByteBuffer 1. Java NIO(New Input/Output)1 1.1. 变更通知(因为每个事件都需要一个监听者 ...
- Atitit.导出excel功能的设计 与解决方案
Atitit.导出excel功能的设计 与解决方案 1.1. 项目起源于背景1 1.2. Js jquery方案(推荐)jquery.table2excel1 1.3. 服务器方案2 1.4. 详细 ...
随机推荐
- BZOJ 4589 Hard Nim(FWT加速DP)
题目链接 Hard Nim 设$f[i][j]$表示前$i$个数结束后异或和为$j$的方案数 那么$f[i][j] = f[i-1][j$ $\hat{}$ $k]$,满足$k$为不大于$m$的质数 ...
- ACdream1032(树形DP)
ACdream1032 题意 给出一棵树,每个节点有权值,问由 \(1\) ~ \(n\) 个节点组成的树块的权值和的最小值. 分析 首先发现 \(n\) 很小,那么我们可以开一个二维数组 \(dp[ ...
- Tiny4412在Ubuntu下给MiniTools添加快捷方式
解压MiniTools-Linux-20140317.tgz root@ubuntu:~/tiny4412/MiniTools-# ls -l total -rw-r--r-- root root M ...
- 咏南下拉列表非数据敏感控件--TYNSearch
咏南下拉列表非数据敏感控件--TYNSearch 拥有下拉列表控件可以大大地加速软件系统的开发. 控件适用于DELPHI5及以上版本的安装和使用. 控件的使用方法: procedure Tflog.s ...
- Overview of iOS Crash Reporting Tools: Part 2/2
Thanks for joining me for the second part of this two-part series on crash reporting services! The f ...
- unity shadow
这东西好难找LIGHT_ATTENUATION(a) shadow 的结果就在这个衰减里,这谁能猜的着,我一点点测出来的,reference也很难找 感谢这位http://blog.csdn.net/ ...
- GPU hang
最近做新项目 初期一直遇到个gpu hang的问题 就是command 提交过去gpu 就一直在那里 直到time out 也没什么别的错误提示 gpu debugger还抓不了 解决方案是 缩小之后 ...
- Java反射学习总结五(Annotation(注解)-基础篇)
Annotation(注解)简单介绍: 注解大家印象最深刻的可能就是JUnit做单元測试,和各种框架里的使用了. 本文主要简介一下注解的用法,下篇文章再深入的研究. annotation并不直接影响代 ...
- 【Hadoop】Hadoop MR 自定义序列化类
1.基本概念 2.Mapper代码 package com.ares.hadoop.mr.flowsum; import java.io.IOException; import org.apache. ...
- [转载]Lenovo E431 装Centos7无线驱动安装
FROM:http://huangyandong.blog.51cto.com/1396940/1613096 查看无线网卡型号 lspci |grep Network #为BCM43142网卡 ...