Atitit.struts排除url 的设计and 原理 自定义filter 排除特定url

1.1. 原理流程1

2. Invoke1

3. StrutsX2

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的更多相关文章

  1. atitit.ajax上传文件的实现原理 与设计

    atitit.ajax上传文件的实现原理 与设计 1. 上传文件的三大难题 1 1.1. 本地预览 1 1.2. 无刷新 1 1.3. 进度显示 1 2.  传统的html4  + ajax 是无法直 ...

  2. Atitit。Tree文件解析器的原理流程与设计实现  java  c# php js

    Atitit.Tree文件解析器的原理流程与设计实现  java  c# php js 1. 解析原理与流程1 1.1. 判断目录  ,表示服  dirFlagChar = "└├─&quo ...

  3. Atitit.数据库表的物理存储结构原理与架构设计与实践

    Atitit.数据库表的物理存储结构原理与架构设计与实践 1. Oracle和DB2数据库的存储模型如图: 1 1.1. 2. 表数据在块中的存储以及RowId信息3 2. 数据表的物理存储结构 自然 ...

  4. Atitit.ioc 动态配置文件guice 设计原理

    Atitit.ioc 动态配置文件guice 设计原理 1. Bat启动时注入配置文件1 2. ioc调用1 3. Ioc 分发器 配合 apche  MethodUtils.invokeStatic ...

  5. dubbo源码解析五 --- 集群容错架构设计与原理分析

    欢迎来我的 Star Followers 后期后继续更新Dubbo别的文章 Dubbo 源码分析系列之一环境搭建 博客园 Dubbo 入门之二 --- 项目结构解析 博客园 Dubbo 源码分析系列之 ...

  6. Atitit.软件架构高扩展性and兼容性原理与概论实践attilax总结

    Atitit.软件架构高扩展性and兼容性原理与概论实践attilax总结 1. 什么是可扩展的应用程序?1 2. 松耦合(ioc)2 3. 接口的思考 2 4. 单一用途&模块化,小粒度化2 ...

  7. Atitit.在线充值功能的设计

    Atitit.在线充值功能的设计 1. 流程1 2. Js sdk api   增加订单1 3. Java api 返回servlet处理1 3.1. 返回网址的本地host测试2 1. 流程 本地增 ...

  8. Atitit.病毒木马的快速扩散机制原理nio 内存映射MappedByteBuffer

    Atitit.病毒木马的快速扩散机制原理nio 内存映射MappedByteBuffer 1. Java NIO(New Input/Output)1 1.1. 变更通知(因为每个事件都需要一个监听者 ...

  9. Atitit.导出excel功能的设计 与解决方案

    Atitit.导出excel功能的设计 与解决方案 1.1. 项目起源于背景1 1.2. Js  jquery方案(推荐)jquery.table2excel1 1.3. 服务器方案2 1.4. 详细 ...

随机推荐

  1. 在16aspx.com上下了一个.net程序,怎么修改它的默认登录名和密码?

    正常应该有个login.aspx文件,找到登入按钮事件,查看验证用户名密码事件,这个验证就有去搜索用户表,然后在这个用户表修改用户名密码就行了.不排除其他表有用用户名关联

  2. 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 ...

  3. Python与数据库[2] -> 关系对象映射/ORM[3] -> sqlalchemy 的声明层 ORM 访问方式

    sqlalchemy的声明层ORM访问方式 sqlalchemy中可以利用声明层进行表格类的建立,并利用ORM对象进行数据库的操作及访问,另一种方式为显式的 ORM 访问方式. 主要的建立步骤包括: ...

  4. 彗星撞地球 | 近25万倍压缩的精品3D动画

    文章目录 写在前面 Prophecy<彗星撞地球> 下载地址 简概 注意 3D射击小游戏 下载地址 简概 写在前面 WareZ是个无形的组织,号称"不以赢利为目的纯技术团体&qu ...

  5. 无法启动此程序,因为计算机中丢失 MSVCP120.dll。尝试安装该程序以解决此问题

    重装了下系统(Windows 7),发现先前装的一些软件大部分不能正确启动,更为奇怪的是,即使我重装了该软件,打开的软件界面的时候,报如下错误:“无法启动此程序,因为计算机中丢失 MSVCP120.d ...

  6. 墨卡托投影、高斯-克吕格投影、UTM投影及我国分带方法

    转自原文 墨卡托投影.高斯-克吕格投影.UTM投影及我国分带方法 一.墨卡托投影.高斯-克吕格投影.UTM投影 1. 墨卡托(Mercator)投影 墨卡托(Mercator)投影,是一种" ...

  7. 查找文件命令find总结以及查找大文件

    find / -name *** 示例如下: [dinpay@zk-spark-01 spark]$ find /home/ll -name slaves /home/ll/spark/conf/sl ...

  8. AndroidStudio快捷键大全

    很多近期学习移动开发的朋友都是通过Eclipse集成ADT开发安卓程序.但是谷歌已经推出了自己的亲儿子--Android Studio.可以说比原来的开发工具强大很多,现在各大公司也已经逐渐淘汰了Ec ...

  9. vscode - 更改emmet生成代码

    有时候生成的代码,并不适用自己,所以想想改生成代码: 因为windows查找文件/文件内容非常慢,所以借用了一下Linux的搜索命令,查找了一下 ie=edge  ,最后,找到了 expand-ful ...

  10. Oracle基础 PL-SQL编程基础(2) 分支结构

    一.分支结构 1.if语句 语法: IF <布尔表达式> THEN PL/SQL和SQL语句 END IF; 示例: DECLARE v_count NUMBER := &n; B ...