Tag: servlet filters

Servletfilter:如何从servletRequest获取所有头文件?

这是我的WebFilter样子 @WebFilter(“/rest/*”) public class AuthTokenValidatorFilter implements Filter { @Override public void init(final FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException { final Enumeration attributeNames = servletRequest.getAttributeNames(); while (attributeNames.hasMoreElements()) { System.out.println(“{attribute} ” + servletRequest.getParameter(attributeNames.nextElement())); } final Enumeration parameterNames = servletRequest.getParameterNames(); while (parameterNames.hasMoreElements()) { […]

通过Filter在Servlet中设置Authentication Header

前言 这是我第一次尝试filter,温柔。 项目描述 我正在尝试为我们的几个应用程序完成SSO的构建,我似乎正在碰壁。 我尝试连接的webapp使用“身份validation”标头来确定应用程序中的用户凭据。 我已经构建了一个filter,希望在将标头传递给webapp之前设置它。 问题 代码通过eclipsevalidation,编译,加载到Tomcat,并传递给webapp。 唯一缺少的是Authentication头。 我错过了什么/做错了什么? AuthenticationFilter源码 package xxx.xxx.xxx.xxx.filters; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import xxx.xxx.xxx.ConfigFile; import xxx.xxx.xxx.Console; import xxx.xxx.xxx.FalseException; import xxx.xxx.activity.EncryptUtil; public class AuthenticationFilter implements Filter { public ConfigFile config; public void init(FilterConfig […]

泽西岛:InjectableProvider没有拿起 – spring

我目前正在尝试使用Jersey创建一个InjectableProvider ,但是我无法让Jersey拿起它。 除了在实现上使用@Provider注释之外,我找不到任何使用它的真实示例,甚至找不到它如何获取它。 看似在泽西岛内写作的人在某些post中暗示这足以让它捡起来。 我是否需要指定一些SPI服务文件,或者将其添加到某个工厂? 注意:我在Glassfish 3.1中运行,并使用Spring 3.1。 Spring可能以某种方式接管Provider的自动加载似乎是合理的。 但是,我只是不知道。 我不是在使用Spring来管理下面建议的InjectableProvider,也不是我试图以其他方式添加它,这可能是我的问题。 import com.sun.jersey.core.spi.component.ComponentContext; import com.sun.jersey.spi.inject.Injectable; import com.sun.jersey.spi.inject.PerRequestTypeInjectableProvider; public abstract class AbstractAttributeInjectableProvider extends PerRequestTypeInjectableProvider { protected final Class type; public AbstractAttributeInjectableProvider(Class type) { super(type); this.type = type; } @Override public Injectable getInjectable(ComponentContext componentContext, AttributeParam attributeParam) { return new AttributeInjectable(type, attributeParam.value()); } } 基本实施: import javax.ws.rs.ext.Provider; @Component […]

Servlet.init()和Filter.init()调用序列

在java Web应用程序中调用的Servlet.init()和Filter.init()方法的顺序是什么? 首先叫哪一个? 是否所有Servlet.init()方法都被调用,而不是任何Filter.doFilter方法?

过滤涉及安全约束的请求

我有一个Java Web应用程序,它使用安全约束来锁定对资源的访问。 我正在尝试在Ajax请求需要身份validation时操纵HTTP 401响应,因此我创建了一个filter,用于在响应中观察HTTP状态并在需要时相应地修改它。 问题是,似乎如果需要身份validation,则在将401发送到浏览器之后才会调用filter。 似乎安全约束在请求处理链中的filter之前。 我的filter的url-pattern比任何安全约束更通用。 平台是WebSphere。 我无法看到Servlet 2.5规范中指定了安全性约束和filter的优先级。 我错过了什么吗?

当调度程序为FORWARD以及调度程序为REQUEST时,如何应用Filter?

我有一个简单的filter: public class TestFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println(“before”); chain.doFilter(request, response); System.out.println(“after”); } public void destroy() { } } 它是web.xml中的第一个filter,它具有以下两个映射之一: cookie-test-filter /* REQUEST 要么 cookie-test-filter /* FORWARD 在这两种情况下,我都看到了输出: before before after after (我也尝试过INCLUDE作为调度程序,以确保一切正常 – INCLUDE没有输出)。 这个filter之后有第三方filter和servlet,我想知道:他们应该怎么做才能在两种情况下应用我的filter?

Url模式,用于排除servletfilter调用的javax.faces.resource

我创建了一个servletfilter来处理会话超时和身份validation。 @WebFilter(urlPatterns={“/acc/*”}) public class ResourceAuthorizationFilter implements Filter { … } 我想过滤的页面有这样的模式: /acc/login-flow , /acc/profiles-flow 。 filter也被调用资源(css,js和images)。 如何配置urlPatterns以排除过滤这些资源? EDIT1 以下是一些过滤的url: http://localhost:8081/acme-0.0.1/acc/login-flow http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/theme.css http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/jquery/jquery.js http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/primefaces.js http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/ajax.gif http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/login.png http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/header.png http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/images/ui-bg_flat_75_ffffff_40x100.png http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/images/default.png http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/images/ui-icons_888888_256x240.png 我在webapp/resources文件夹下有一些自定义的css / js文件,但这些文件不在那里。 acc部分来自: Spring MVC Servlet /acc/* EDIT2 这些代码示例来自一个使用JSF 2.0,PrimeFaces 3.4.1,Spring 3.0.5.RELEASE,Spring Security 3.0.3.RELEASE和Spring Web Flow 2.3.0.RELEASE实现的项目。

使用“/”创建servlet url-pattern

我创建了名为MainContent的servlet。 我有这样的映射 MainContent MainContent ge.test.servlet.MainContent MainContent /main 所以,当我转到link: // localhost:8080 / MyAppl / main时,我进入了servlet的doGet()方法。 然后我创建RequestDispatcher转发到index.jsp。 一切正常! RequestDispatcher rd = context.getRequestDispatcher(“/index.jsp?language=”+ lang); rd.forward(request, response); 一切正常! 题: 现在我需要更改url-pattern。 我需要这样的东西 – 当我进入localhost:8080 / MyAppl /我需要被重定向到我的servlet。 所以我创造了类似的东西: / 好的,它的确有效! 我被重定向到servlet。 但这里发生了一些错误。 当Servlet创建RequestDispatcher时,我的index.jsp中没有图像和css。 当我在firebug控制台中看到时,我看到了错误: Resource interpreted as Stylesheet but transferred with MIME type text/html: “http://localhost:8080/MyApp/font/font_big.css”. localhost/:15 Resource interpreted as Image […]

Java Filter无限循环

我想实现一个filter来进行身份validation,但不知怎的,它被卡在无限循环中…任何想法都赞赏。 HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; doBeforeProcessing(request, response); Throwable problem = null; HttpSession session = httpRequest.getSession(true); if(session.getAttribute(“userName”)!=null&&session.getAttribute(“userName”)!=(“”)) { try { chain.doFilter(request, response); } catch (Throwable t) { // If an exception is thrown somewhere down the filter chain, // we still want to execute our after processing, and then // […]

Servletfilter包装器 – 更改内容类型时遇到问题

我有RESTful网络服务,由javascript使用。 此服务返回内容类型“application / json”。 但是,对于IE,内容类型必须是“text / html”。 因此,当IE被检测为客户端时,我编写了一个filter和包装器来更改内容类型。 我的逻辑似乎对内容类型没有影响。 我究竟做错了什么? filter: public class IE8Filter implements Filter { private Logger logger = LoggerHelper.getLogger(); @Override public void destroy() {} @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; String userAgent = request.getHeader(“User-Agent”); logger.debugf(“User […]