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. 详细 ...
随机推荐
- 在16aspx.com上下了一个.net程序,怎么修改它的默认登录名和密码?
正常应该有个login.aspx文件,找到登入按钮事件,查看验证用户名密码事件,这个验证就有去搜索用户表,然后在这个用户表修改用户名密码就行了.不排除其他表有用用户名关联
- Codeforces Round #299 (Div. 2) B. Tavas and SaDDas【DFS/*进制思维/位运算/一个数为幸运数,当且仅当它的每一位要么是4,要么是7 ,求小于等于n的幸运数个数】
B. Tavas and SaDDas time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Python与数据库[2] -> 关系对象映射/ORM[3] -> sqlalchemy 的声明层 ORM 访问方式
sqlalchemy的声明层ORM访问方式 sqlalchemy中可以利用声明层进行表格类的建立,并利用ORM对象进行数据库的操作及访问,另一种方式为显式的 ORM 访问方式. 主要的建立步骤包括: ...
- 彗星撞地球 | 近25万倍压缩的精品3D动画
文章目录 写在前面 Prophecy<彗星撞地球> 下载地址 简概 注意 3D射击小游戏 下载地址 简概 写在前面 WareZ是个无形的组织,号称"不以赢利为目的纯技术团体&qu ...
- 无法启动此程序,因为计算机中丢失 MSVCP120.dll。尝试安装该程序以解决此问题
重装了下系统(Windows 7),发现先前装的一些软件大部分不能正确启动,更为奇怪的是,即使我重装了该软件,打开的软件界面的时候,报如下错误:“无法启动此程序,因为计算机中丢失 MSVCP120.d ...
- 墨卡托投影、高斯-克吕格投影、UTM投影及我国分带方法
转自原文 墨卡托投影.高斯-克吕格投影.UTM投影及我国分带方法 一.墨卡托投影.高斯-克吕格投影.UTM投影 1. 墨卡托(Mercator)投影 墨卡托(Mercator)投影,是一种" ...
- 查找文件命令find总结以及查找大文件
find / -name *** 示例如下: [dinpay@zk-spark-01 spark]$ find /home/ll -name slaves /home/ll/spark/conf/sl ...
- AndroidStudio快捷键大全
很多近期学习移动开发的朋友都是通过Eclipse集成ADT开发安卓程序.但是谷歌已经推出了自己的亲儿子--Android Studio.可以说比原来的开发工具强大很多,现在各大公司也已经逐渐淘汰了Ec ...
- vscode - 更改emmet生成代码
有时候生成的代码,并不适用自己,所以想想改生成代码: 因为windows查找文件/文件内容非常慢,所以借用了一下Linux的搜索命令,查找了一下 ie=edge ,最后,找到了 expand-ful ...
- Oracle基础 PL-SQL编程基础(2) 分支结构
一.分支结构 1.if语句 语法: IF <布尔表达式> THEN PL/SQL和SQL语句 END IF; 示例: DECLARE v_count NUMBER := &n; B ...