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. J.U.C并发框架源码阅读(一)AtomicInteger

    基于版本jdk1.7.0_80 java.util.concurrent.atomic.AtomicInteger 代码如下 /* * ORACLE PROPRIETARY/CONFIDENTIAL. ...

  2. 解决win10下微信开发者工具点击错位问题

    在系统设置->显示->更改文本.应用等项目的大小选项中将百分比改为100%即可.

  3. Properties文件工具读取类

    import java.io.IOException;import java.io.InputStream;import java.util.Properties; public class Comm ...

  4. 「kuangbin带你飞」专题二十 斜率DP

    layout: post title: 「kuangbin带你飞」专题二十 斜率DP author: "luowentaoaa" catalog: true tags: mathj ...

  5. TaobaoVM

    作者:Andoter链接:https://www.zhihu.com/question/275665265/answer/416021488来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...

  6. docker环境准备及理论

    1.预热 内核运行在内核空间,进程运行在用户空间,linux进程特性:父进程负责子进程的创建和回收,白发人送黑发人.容器就是为了保护它里面的内容物,不受其他容器干扰,也不去干扰其他容器.容器让进程认为 ...

  7. Bluetooth篇 开发实例之十一 官网的Bluetooth Chat sample的bug

    当没有匹配的设备和没有找到可用设备的时候. // If there are paired devices, add each one to the ArrayAdapter if (pairedDev ...

  8. Ubuntu 16.04将系统时间写入到硬件时间BIOS

    说明:在Ubuntu中为了和Windows保持一致,会将系统时间设置成CST的,所以下面的说法是设置成UTC的问题是由于所在的环境不一致导致的,本章只讨论如何设置时间到BIOS,不做时区分析,下面忽略 ...

  9. ASIHTTPRequest框架使用总结系列之阿堂教程2(同步请求)

    从本篇开始,阿堂结合一些具体代码来说明.在ASIHTTPRequest框架中,与http请求相关的类有ASIHTTPRequest  和 ASIFormDataRequest,其中最常用的是 ASIH ...

  10. Angularjs中的拦截器 (卧槽,好牛逼)

    $httpAngularJS 的 $http 服务允许我们通过发送 HTTP 请求方式与后台进行通信.在某些情况下,我们希望可以俘获所有的请求,并且在将其发送到服务端之前进行操作.还有一些情况是,我们 ...