在项目中我遇到读取资源问题,资源路径没有规则,还有很多虚拟路径处理。我使用了Filter过滤404错误方法处理这些资源。在实现过程中统一了资源处理方法,并且容易同spring的整合。该实现在Tomcat 6.0上测试通过。
实现需要注意二点:
- 1.使用HttpServletResponseWrapper包装response
- 2.覆盖sendError方法,遇到404错误不能触发错,如触发错误response就被托管,托管后就不能输出数据。
下面是HttpServletResponseWrapper具体实现:
private class Error404ResponseWrapper extends HttpServletResponseWrapper {
private int status = SC_OK;
public Error404ResponseWrapper(Error404Filter error404Filter, HttpServletResponse response){
super(response);
}
@Override
public void sendError(int sc) throws IOException {
this.status = sc;
if(isFound()){
super.sendError(sc);
}else{
super.setStatus(SC_OK);
}
}
@Override
public void sendError(int sc, String msg) throws IOException {
this.status = sc;
if(isFound()){
super.sendError(sc,msg);
}else{
super.setStatus(SC_OK);
}
}
public void setStatus(int status){
this.status = status;
super.setStatus(status);
}
@Override
public void reset() {
this.status = SC_OK;
super.reset();
}
public boolean isFound(){
return status != SC_NOT_FOUND;
}
}
注意sendError处理,上面代码解决了核心两个问题。接下来完成过滤就可。
public class Error404Filter implements Filter {
@Override
public void destroy() {
}
@Override
public void init(FilterConfig config) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse rep,FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) rep;
Error404ResponseWrapper responseWrapper = new Error404ResponseWrapper(this, response);
chain.doFilter(request, responseWrapper);
if(responseWrapper.isFound()){
return ;
}
//TODO 实现读取资源
//readResource(request,response);
//资源不存在返回错误
String uri = request.getRequestURI();
logger.warn("This is not resource = {}",uri);
response.sendError(HttpServletResponse.SC_NOT_FOUND,uri);
}
}
注意:在web.xml中把该过滤器放在所有过滤器后。
分享到:
相关推荐
过滤器可以检查用户的角色,如果用户不具备访问某个资源的权限,返回错误信息或重定向到无权限页面。 5. **GZIP压缩过滤器**:提高网站性能,通过压缩HTTP响应内容减少传输的数据量。过滤器可以检测客户端是否接受...
4. 错误处理:如果在处理过程中发生`ServletException`或`IOException`,过滤器会记录这些异常信息。 5. 销毁方法(`destroy()`):当过滤器不再使用,即将被卸载时,会调用此方法。在这里,我们简单地清空了资源,...
3. **配置过滤器**:在项目的web.xml文件中,我们需要定义这个过滤器,并指定哪些URL需要被过滤。例如,我们可能希望保护所有需要登录才能访问的页面。 ```xml <filter-name>LoginFilter <filter-class>...
在Java Web开发中,过滤器(Filter)是一个强大的工具,常用于实现各种需求,如登录操作的处理。本文将深入探讨如何使用过滤器进行登录操作,以及这一过程中的相关知识点。 首先,我们要理解过滤器的基本概念。在...
2. **映射过滤器**:紧接着使用`<filter-mapping>`元素,关联之前定义的过滤器名称,并通过`<url-pattern>`指定过滤器的作用范围。例如,可以配置过滤器仅对某个JSP页面(如`/a.jsp`)或整个目录(如`/a/*`)生效。 ...
另一种方法是在Web应用的`web.xml`配置文件中,使用Servlet过滤器来捕获404错误。当请求没有匹配到任何Struts2动作时,过滤器可以捕获这个情况并重定向到404错误页面。 ```xml <filter-name>catch404Filter ...
5. **配置过滤器**:在`web.xml`部署描述符或使用Servlet 3.0以上的注解`@WebFilter`,我们可以指定过滤器的URL模式,决定哪些请求需要通过这个过滤器。例如,将过滤器应用于所有`.jsp`页面或特定的Servlet。 6. **...
2. **配置过滤器**:在Web应用的`web.xml`配置文件中,我们需要声明并配置过滤器,指定其过滤哪些URL,以及过滤器的顺序。在这个实例中,可能我们会设置过滤器拦截所有需要登录的页面。 3. **过滤器链**:多个过滤...
在这个实例代码中,我们将深入探讨Servlet过滤器的使用,以及如何通过它来增强应用程序的功能。 首先,我们需要了解Servlet过滤器的基本原理。在`web.xml`部署描述符中,我们可以通过`<filter>`和`<filter-mapping>...
在Java Web开发中,过滤器是Servlet规范的一部分,它允许开发者在请求到达目标资源(如Servlet、JSP等)之前和之后对请求和响应进行拦截处理。通过实现`javax.servlet.Filter`接口并配置在web.xml或使用注解,我们...
SSM框架,全称Spring、...总的来说,SSM框架的登录过滤器是系统安全的重要组成部分,通过对请求的拦截和处理,确保只有合法用户才能访问受保护的资源。通过合理的设计和实现,我们可以构建出高效、安全的Web应用。
总结来说,"过滤器--控制不同权限用户访问不同文件夹代码.rar"是一个实用的示例,它展示了如何使用Java Servlet过滤器技术实现精细的权限控制,确保不同权限级别的用户只能访问其被授权的资源。这样的功能对于保护...
过滤器是Servlet API的一部分,它允许我们在请求到达目标资源(如Servlet、JSP页面)之前或之后对请求和响应进行拦截处理。 首先,我们需要了解过滤器的基本概念。在Java Web中,过滤器是一个实现了javax.servlet....
2. **配置过滤器**:在web.xml文件中,我们需定义过滤器并映射它,指定哪些URL需要经过这个过滤器。在本例中,我们将过滤所有/admin路径下的请求。 ```xml <filter-name>LoginFilter <filter-class>...
2. **Filter配置**:在`web.xml`配置文件中,我们需要指定过滤器的类名、URL模式以及其在请求处理链中的顺序。这决定了哪些请求会被过滤,以及过滤器的执行顺序。 3. **路径匹配**:过滤器可能需要检查请求的URL...
SSM(Spring、SpringMVC、MyBatis)框架是Java Web开发中常见的技术栈,其在处理用户请求时,通常会用到过滤器(Filter)进行预处理,以实现如登录验证等功能。本篇文章将深入讲解如何在SSM项目中通过过滤器实现登录...
- `@Order`注解:Spring Boot允许使用该注解来指定过滤器的执行顺序。顺序越小,过滤器越早执行。 - `FilterRegistrationBean`:在Spring Boot中,可以使用此Bean来更灵活地配置Filter,包括设置URL匹配模式、初始...
**过滤器机制**是Servlet技术提供的一个强大功能,它可以在请求到达目标资源(如Servlet或JSP页面)之前对请求进行预处理,并在响应返回客户端之前对其进行后处理。通过合理地设计过滤器,可以有效地解决乱码问题。 ...
**过滤器(Filter)** 是Servlet容器提供的一个接口,它可以在请求达到目标资源(如Servlet或JSP页面)之前进行预处理,也可以在响应返回客户端之前进行后处理。在Java Web开发中,过滤器经常被用来实现诸如权限验证...
3. **Filter配置**:文章会讨论如何在`web.xml`或使用Java Configuration(如Spring框架)来配置过滤器,指定哪些URL路径需要被过滤,以及过滤器的执行顺序。 4. **权限检查逻辑**:接着,它可能详细阐述过滤器的`...