首页编程filter-mapping(怎么为filter-mapping中的#设置例外)

filter-mapping(怎么为filter-mapping中的#设置例外)

编程之家2023-11-0395次浏览

大家好,今天我将向大家分享有关filter-mapping和怎么为filter-mapping中的/*设置例外的一些独特见解,希望能够为你们带来新的思考和启示。

filter-mapping(怎么为filter-mapping中的#设置例外)

怎么为filter-mapping中的/*设置例外

在web.xml声明的一个filter中:

<!– session过滤filter–>

<filter>

<filter-name>SessionFilter</filter-name>

<filter-class>

com.iqbon.jcms.web.util.SessionFilter

filter-mapping(怎么为filter-mapping中的#设置例外)

</filter-class>

<init-param>

<param-name>excludedPages</param-name>

<param-value>/admin/login.do</param-value>

</init-param>

</filter>

filter-mapping(怎么为filter-mapping中的#设置例外)

<filter-mapping>

<filter-name>SessionFilter</filter-name>

<url-pattern>/admin/*</url-pattern>

</filter-mapping>

可以看到url-pattern的设置里面过滤的url规则是/admin/*,如果要把/admin/login.do排除在过滤url之外。

可以结合init-param的初始化参数和HttpServletRequest的getServletPath()方法来判断。

首先加上初始化参数:

<init-param>

<param-name>excludedPages</param-name>

<param-value>/admin/login.do</param-value>

</init-param>

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.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import org.apache.commons.lang3.StringUtils;

import com.iqbon.jcms.util.KeyConstant;

/**

* session过滤器

*/

public class SessionFilter implements Filter{

/**

*需要排除的页面

*/

private String excludedPages;

private String[] excludedPageArray;

/**

*@see Filter#destroy()

*/

public void destroy(){

return;

}

/**

*对session进行判断当前访问是否有登录

*/

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException{

boolean isExcludedPage= false;

for(String page: excludedPageArray){//判断是否在过滤url之外

if(((HttpServletRequest) request).getServletPath().equals(page)){

isExcludedPage= true;

break;

}

}

if(isExcludedPage){//在过滤url之外

chain.doFilter(request, response);

} else{//不在过滤url之外,判断session是否存在

HttpSession session=((HttpServletRequest) request).getSession();

if(session== null|| session.getAttribute(KeyConstant.SESSION_KEY_USER)== null){

((HttpServletResponse) response).sendRedirect(“/login.htm”);

} else{

chain.doFilter(request, response);

}

}

}

/**

*初始化函数,获取需要排除在外的url

*/

public void init(FilterConfig fConfig) throws ServletException{

excludedPages= fConfig.getInitParameter(“excludedPages”);

if(StringUtils.isNotEmpty(excludedPages)){

excludedPageArray= excludedPages.split(“,”);

}

return;

}

}

filter-mapping元素的简介

filter-mapping元素用来声明Web应用中的过滤器映射。过滤器可被映射到一个servlet或一个URL模式。将过滤器映射到一个servlet中会造成过滤器作用于servlet上。将过滤器映射到一个URL模式中则可以将过滤器应用于任何资源,只要该资源的URL与URL模式匹配。过滤是按照部署描述符的filter-mapping元素出现的顺序执行的。

web.xml lt;filter-mapping>我不想过滤html文件,怎么设置

不使用/*拦截所有,拦截想拦截的就可以了

类似下面的过滤方式

<filter>

<filter-name>encodingFilter</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>*.action</url-pattern>

</filter-mapping>

<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>*.usl</url-pattern>

</filter-mapping>

<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>*.jsp</url-pattern>

</filter-mapping>

<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>*.view</url-pattern>

</filter-mapping>

<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>/jaxrs/*</url-pattern>

</filter-mapping>

在filter类中判断一下,如果是.html结尾的就不过滤。

HttpServletRequest req=(HttpServletRequest)request;

//由于web.xml中设置Filter过滤全部请求,可以排除不需要过滤的url

String reqURI= req.getRequestURI();

if(reqURI.endsWith(".html")) chain.doFilter(request, response);

HttpServletRequest req=(HttpServletRequest)request;

//由于web.xml中设置Filter过滤全部请求,可以排除不需要过滤的url

String reqURI= req.getRequestURI();

if(reqURI.endsWith(".html")) chain.doFilter(request, response);

chain是以下过滤方法中的chain吗?

public void doFilter(ServletRequest request,

ServletResponse response,

FilterChain chain) throws IOException, ServletException{

另外, if(reqURI.endsWith(".html"))到底是真还是假

HttpServletRequest req=(HttpServletRequest)request;

//由于web.xml中设置Filter过滤全部请求,可以排除不需要过滤的url

String reqURI= req.getRequestURI();

if(reqURI.endsWith(".html")) chain.doFilter(request, response);

chain是以下过滤方法中的chain吗?

public void doFilter(ServletRequest request,

ServletResponse response,

FilterChain chain) throws IOException, ServletException{

另外, if(reqURI.endsWith(".html"))到底是真还是假

就是这个chain,这个判断就是判断你放问的路径是否以.html结尾,你可以试试。

HttpServletRequest req=(HttpServletRequest)request;

//由于web.xml中设置Filter过滤全部请求,可以排除不需要过滤的url

String reqURI= req.getRequestURI();

if(reqURI.endsWith(".html")) chain.doFilter(request, response);

chain是以下过滤方法中的chain吗?

public void doFilter(ServletRequest request,

ServletResponse response,

FilterChain chain) throws IOException, ServletException{

另外, if(reqURI.endsWith(".html"))到底是真还是假

就是这个chain,这个判断就是判断你放问的路径是否以.html结尾,你可以试试。

报错

java.lang.IllegalStateException: getWriter() has already been called for this response

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException{

//把ServletRequest和ServletResponse转换成真正的类型

HttpServletRequest req=(HttpServletRequest)request;

String reqURI= req.getRequestURI();

if(reqURI.endsWith(".do")) chain.doFilter(request, response);

System.out.println(reqURI);

chain.doFilter(request, response);

}

我这里用过的原代码,没错,你看下你别的地方,用到response的地方

//把ServletRequest转换成真正的类型

HttpServletRequest req=(HttpServletRequest)request;

String reqURI= req.getRequestURI();

if(reqURI.endsWith(".html")) chain.doFilter(request, response);

else{

return;

}

filter-mapping的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于怎么为filter-mapping中的/*设置例外、filter-mapping的信息别忘了在本站进行查找哦。

google排名优化,谷歌如何快速提升排名小程序开发公司介绍(小程序开发公司十大排名)