`

servlet过滤器配置白名单、黑名单

 
阅读更多

1、web.xml配置

<filter>
		<description>过滤是否登陆</description>
		<filter-name>encodingFilter</filter-name>
		<filter-class>com.stxx.manager.filter.EncodingFilter</filter-class>
		<init-param>
			<description>配置白名单</description>
			<param-name>noCheck</param-name>
			<param-value>
				/login.jsp,
				/register.jsp
			</param-value>
		</init-param>
		<init-param>
			<description>过滤不成功转向地址</description>
			<param-name>redirectPath</param-name>
			<param-value>/login.jsp</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>*.jsp</url-pattern>
	</filter-mapping>

 2、创建过滤器

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
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 org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

/**
 * 登陆过滤 配置白名单、黑名单
 * @author zxf
 *
 */
public class EncodingFilter implements Filter {
	
	Logger log = Logger.getLogger(EncodingFilter.class);
	
	private static final String NO_CHECK = "noCheck";
	private static final String REDIRECT_PATH = "redirectPath";
	private List<String> noCheckList = new ArrayList<String>();
	private String redirectPath = "/login.jsp";

	public void init(FilterConfig init) throws ServletException {
		log.info("初始化filter....");
		String noChecks = init.getInitParameter(NO_CHECK);
		if(StringUtils.isNotBlank(noChecks)){
			if(StringUtils.indexOf(noChecks,",")!=-1){
				for(String no : noChecks.split(",")){
					noCheckList.add(StringUtils.trimToEmpty(no));
				}
			}else{
				noCheckList.add(noChecks);
			}
		}
		String path = init.getInitParameter(REDIRECT_PATH);
		if(StringUtils.isNotBlank(path)){
			redirectPath = path;
		}
	}
	
	private boolean check(String path) {
		if (noCheckList == null || noCheckList.size() <= 0)
			return false;
		for (String s : noCheckList) {
			if (path.indexOf(s) > -1) {
				return true;
			}
		}
		return false;
	}

	public void doFilter(ServletRequest arg0, ServletResponse arg1,
			FilterChain arg2) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) arg0;
		HttpServletResponse response = (HttpServletResponse) arg1;
		log.info("被filter过滤.......");
		String contextpath = request.getContextPath();
		if("/".equals(contextpath)){contextpath="";}
		if(check(request.getRequestURI())){
			log.info("白名单");
			arg2.doFilter(request, response);
		}else{
			log.info("黑名单");
			response.sendRedirect(response.encodeURL(contextpath+redirectPath));
		}
	}

	public void destroy() {
		log.info("销毁filter....");
	}

}
 
分享到:
评论

相关推荐

    过滤器源代码

    同时,可以通过`web.xml`配置文件来声明和配置过滤器,指定其过滤哪些请求以及过滤规则。 6. **安全考虑**:这样的过滤器设计是为了提高系统安全性,防止未经授权的访问。然而,为了确保有效性和安全性,需要考虑...

    文件服务器访问虚拟路径过滤器源代码

    这可能涉及到维护一个白名单或黑名单,并在过滤器中进行比较。 5. **会话和权限管理**:如果需要基于用户角色的访问控制,需要获取用户的会话信息,并检查他们是否有足够的权限访问请求的资源。 6. **日志和异常...

    关于ip的过滤器 spring security例子

    2. **IP白名单与黑名单**:除了允许列表,还可以设置禁止列表,或者结合两者,以更灵活地控制访问。 3. **代理服务器**:如果应用部署在代理服务器后面,需要处理X-Forwarded-For头来获取客户端真实IP。 4. **多环境...

    java 请求参数过滤拦截

    4. **白名单策略**:只允许特定字符或字符集,而非黑名单策略(即阻止某些字符)。这可以更有效地控制输入,降低漏网之鱼的可能性。 5. **长度限制**:设置参数的最大长度,防止过长的输入导致内存溢出或其他安全...

    IP地址段的过滤,限制ip,限制主机访问

    3. **Java Web过滤器(Filter)**:在Java Web应用中,Filter是Servlet规范的一部分,用于拦截HTTP请求和响应。我们可以通过自定义Filter实现IP过滤,如在`doFilter()`方法中检查请求的IP地址。 4. **Web应用配置**...

    filter过滤关键字

    4. **过滤策略**:除了简单的字符过滤,还可以使用更复杂的策略,如转义特殊字符、白名单过滤(只允许特定字符或字符串)、黑名单过滤(阻止特定字符或字符串)等。选择哪种策略取决于具体应用场景的安全需求和性能...

    lucy-xss-filter

    如果将过滤器与白名单方法一起使用,它将为XSS攻击的网站提供比使用黑名单方法的现有过滤器更严格的安全措施。 同时支持DOM和SAX解析器。XssPreventer 使用apache-common-lang3库防止XSS攻击。 只需按如下所示转换...

    spring与dwr整合(简单)

    可以通过配置 DWR 的安全选项来限制访问权限,如使用白名单或者 IP 黑名单。 通过以上步骤,Spring 与 DWR 的整合就可以实现高效且安全的 AJAX 通信。这使得前端界面可以实时更新,提高用户体验,同时利用 Spring ...

    基于SpringBoot框架的maven依赖包,能够对特定方法、特定IP的请求进行限制与拦截

    项目可能使用了Spring Security或自定义的过滤器实现此功能,根据预定义的IP白名单或黑名单来控制访问权限。 2. **请求拦截**:在Spring Boot中,我们可以使用AOP(面向切面编程)来实现请求拦截。AOP允许我们在不...

Global site tag (gtag.js) - Google Analytics