`
liyixing1
  • 浏览: 958680 次
  • 性别: Icon_minigender_1
  • 来自: 江西上饶
社区版块
存档分类
最新评论

ContextFilter过滤器

阅读更多
配置的例子

<filter>
        <filter-name>ContextFilter</filter-name>
        <display-name>ContextFilter</display-name>
        <filter-class>org.ofbiz.webapp.control.ContextFilter</filter-class>
        <init-param>
            <param-name>disableContextSecurity</param-name>
            <param-value>N</param-value>
        </init-param>
        <init-param>
            <param-name>allowedPaths</param-name>
            <param-value>/error:/control:/select:/index.html:/index.jsp:/default.html:/default.jsp:/images:/static:/js</param-value>
        </init-param>
        <init-param>
            <param-name>errorCode</param-name>
            <param-value>403</param-value>
        </init-param>
        <init-param>
            <param-name>redirectPath</param-name>
            <param-value>/control/main</param-value>
        </init-param>
    </filter>




1.allowedPaths参数

该参数的初始化如下

首先可以看到的是每次新的request过来都会被解析allowedPath,也许这里可以优化一下

if (request.getAttribute(ContextFilter.FORWARDED_FROM_SERVLET) == null) {
            // Debug.logInfo("In ContextFilter.doFilter, FORWARDED_FROM_SERVLET is NOT set", module);
            String allowedPath = config.getInitParameter("allowedPaths");
            String redirectPath = config.getInitParameter("redirectPath");
            String errorCode = config.getInitParameter("errorCode");

            List<String> allowList = StringUtil.split(allowedPath, ":");
            allowList.add("/");  // No path is allowed.
            allowList.add("");   // No path is allowed.




往下点代码有类似这样的一段

if (!allowList.contains(requestPath) && !allowList.contains(requestInfo) && !allowList.contains(httpRequest.getServletPath())) {


这是说当request的资源名不位于allowedPath 中
那么接下去是

String filterMessage = "[Filtered request]: " + contextUri;

                if (redirectPath == null) {
                    int error = 404;
                    if (UtilValidate.isNotEmpty(errorCode)) {
                        try {
                            error = Integer.parseInt(errorCode);
                        } catch (NumberFormatException nfe) {
                            Debug.logWarning(nfe, "Error code specified would not parse to Integer : " + errorCode, module);
                        }
                    }
                    filterMessage = filterMessage + " (" + error + ")";
                    wrapper.sendError(error, contextUri);
                } else {
                    filterMessage = filterMessage + " (" + redirectPath + ")";
                    if (!redirectPath.toLowerCase().startsWith("http")) {
                        redirectPath = httpRequest.getContextPath() + redirectPath;
                    }
                    wrapper.sendRedirect(redirectPath);
                }
                Debug.logWarning(filterMessage, module);
                return;
            }



wrapper.sendRedirect(redirectPath);这句会把你给重定向到其他地方。

redirectPath是我们上面配置的

<init-param>
            <param-name>redirectPath</param-name>
            <param-value>/control/main</param-value>
</init-param>



一般都是配置为重定向/control/main。

如果我们把/control从allowedPaths删除掉就会发现请求不断被重定向到/control/main。最后ko了。。。。。

本文转载自:
http://liyixing.tk:20080/articles/2015/04/14/1428998097305.html
分享到:
评论
2 楼 liyixing1 2012-11-09  
我改名了 写道
你博客上  乱七八糟的 东西真多 。。。。

。。。
1 楼 我改名了 2012-10-26  
你博客上  乱七八糟的 东西真多 。。。。

相关推荐

    过滤器Filter的全面解析

    过滤器接口还提供了其他方法,如`init(FilterConfig config)`的替代方法`init(javax.servlet.ServletContainerInitializer.Context context)`,以及Servlet 3.0引入的`@DeclareRoles`注解来声明过滤器的访问角色。...

    STRUTS:filter过滤器

    ### STRUTS:filter过滤器 #### 概述 在Java Web开发中,过滤器(Filter)是一种重要的组件,用于拦截客户端发送至服务器的请求或服务器返回至客户端的响应。Struts框架作为Java Web开发中的一种流行框架,利用了...

    jsp中Filter类实现过滤器功能

    ### JSP中Filter类实现过滤器功能 #### 概述 在Java Web开发中,`Filter`是一种常用的技术,它可以对请求和响应进行预处理或后处理,常用于执行一些通用的操作,例如权限验证、编码统一设置、敏感词过滤等。本文...

    .NET MVC授权过滤器验证登录

    主要有四种类型的过滤器:授权过滤器、操作结果过滤器、异常过滤器和资源过滤器。授权过滤器是最早执行的,通常用于进行身份验证和授权检查。 要创建自定义的授权过滤器,我们需要继承`System.Web.Mvc....

    Filter-四个有用的Java过滤器

    Java过滤器(Filter)是Java Web开发中的一个重要概念,它属于Servlet技术的一部分,主要用于处理HTTP请求和响应。在给定的文件中,提到了四个有用的Java过滤器实例,分别是: 1. **使浏览器不缓存页面的过滤器**:...

    过滤器和监听器的使用与区别

    在Java Web开发中,过滤器(Filter)和监听器(Listener)是两种非常重要的组件,它们主要用于增强应用程序的功能和管理应用程序的状态。本篇文章将详细解释这两种技术的使用、配置及其区别。 首先,我们来了解过滤...

    java 常用过滤器

    在Java Web开发中,过滤器(Filter)是一个非常重要的组件,它允许开发者在请求被处理之前或之后执行一些额外的操作。下面将详细讲解Java中五种常用的过滤器及其应用场景。 1. **使浏览器不缓存页面的过滤器** ...

    pipecodefiltter.zip_管道过滤_管道过滤器_管道风格

    5. **KWIC11.java**: 关键词在上下文(Key Word in Context)过滤器,可能用于提取关键词并将其置于上下文之中,如显示关键词前后的几个单词,用于文本分析或搜索。 6. **CircularShifter11.java**: 该过滤器可能...

    过滤器filter和监听器listener的应用总结

    在Java Web开发中,过滤器(Filter)和监听器(Listener)是两个非常重要的概念,它们主要用于增强应用程序的功能和管理应用程序的状态。这篇文章将对这两者的应用进行深入的总结。 **过滤器Filter** 过滤器是在...

    servlet中的过滤器与监听器

    在Servlet技术中,过滤器(Filter)和监听器(Listener)是两个非常重要的概念,它们帮助开发者实现对请求和响应的拦截、处理以及管理应用程序的状态。 ### 1. Servlet过滤器 **过滤器** 是Servlet API提供的一种...

    Java几个过滤器学习技巧

    在Java Web开发中,过滤器(Filter)是一种非常实用的功能组件,它可以对用户的请求或响应进行预处理或后处理。通过实现`javax.servlet.Filter`接口,开发者可以自定义过滤器来执行特定的操作。本文将详细介绍两个...

    【ASP.NET编程知识】ASP.NET mvc4中的过滤器的使用.docx

    ASP.NET MVC4 中的过滤器(Filter)是实现交叉关注点的重要工具。过滤器可以把附加逻辑注入到MVC框架的请求处理中,使得开发者可以更方便地处理授权、日志记录、错误处理等任务。在本文中,我们将详细介绍ASP.NET ...

    Aspdotnet2_0中自定义过滤器对Response内容进行处理

    ASP.NET中的过滤器分为五种类型:Authorization Filters(授权过滤器)、Action Filters(操作过滤器)、Result Filters(结果过滤器)、Exception Filters(异常过滤器)和Route Constraints(路由约束)。...

    过滤器与监听器

    在Java Web开发中,过滤器(Filter)和监听器(Listener)是两个非常重要的概念,它们主要用于增强应用程序的功能和管理应用程序的生命周期。本篇将详细阐述这两个知识点。 **过滤器(Filter)** 过滤器是在...

    SpringBoot的Filter过滤器

    1. 使用`@WebFilter`注解:这是一个Servlet API中的注解,可以直接在`Filter`类上使用,指定过滤的URL模式。 ```java import javax.servlet.annotation.WebFilter; @WebFilter(filterName = "myFilter", ...

    过滤器和监听器的使用步骤

    在Java Web开发中,过滤器(Filter)和监听器(Listener)是两个非常重要的概念,它们主要用于增强应用程序的功能和管理应用程序的状态。以下是这两个概念的详细解释以及如何在实际项目中使用它们。 ### 过滤器...

    monorail的过滤器

    在提供的压缩包文件"3.Filter"中,可能包含了一些具体的Monorail过滤器实现或示例代码。你可以通过查看和分析这些文件来深入了解如何在Monorail项目中实际使用和配置过滤器。 总的来说,Monorail的过滤器机制提供了...

    struts过滤器.doc

    过滤器(Filter)是Servlet API的一部分,允许开发者在请求到达目标资源(如Servlet或JSP)之前进行预处理,并在响应返回给客户端之前进行后处理。在Struts2中,过滤器与拦截器(Interceptor)一起工作,提供了强大...

    javaEE(上下文_监听器_过滤器) ppt

    Java EE(Java Platform, Enterprise Edition)是用于构建企业级分布式应用程序的框架,它提供了一系列标准接口和组件模型,包括上下文、监听器和过滤器。这些概念是Java EE开发中的核心组成部分,对于理解和优化Web...

    Yii控制器中filter过滤器用法分析

    在Yii框架中,控制器是处理用户请求和返回响应的主要组件,而filter过滤器是控制器的重要组成部分,用于在控制器动作执行之前和之后执行某些检查和操作。 在Yii框架中,使用filter过滤器能够帮助开发者实现权限控制...

Global site tag (gtag.js) - Google Analytics