您的位置:首页 > 其它

Servlet-过滤器

2017-12-21 00:00 225 查看
在Web应用开发中的过滤器截取从客户端进来的请求,并做出处理的答复

过滤器在WEB应用开发中的常见应用

可以对客户提交的数据进行重新编码
可以从系统里获得配置的信息
可以过滤掉客户的屏蔽非法文字
可以验证客户是否已经登录


过滤器可以部署多个组成一个过滤链,每个过滤器只执行某个特定的操作或者检查,这样请求在达到被访问的目标前,需要经过这个过滤链。如果安全的问题不能访问目标资源,那么过滤器可以把客户端的请求拦截。

实现一个过滤器

1.所有的Servlet过滤器类都必须实现javax.servlet.Filter接口
2.在web.xml中部署过滤器
3.init(FilterConfig)初始化方法,读取Web.xml文件中servlet过滤器的初始化参数
4.doFilter(ServletRequest,ServletResponse,FilterChain);--这个方法完成实际的过滤器操作。当客户请求访问与过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter()方法,FilterChain参数用于访问后续过滤器
5.destroy()方法:Servlet容器在销毁过滤器实例前调用该方法,在这个方法中可以释放Servlet过滤器占用的资源


代码实现

web.xml

<!-- 配置拦截过滤器 -->
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.kaner.bbs.filter.LoginFilter</filter-class>
<init-param>
<param-name>noLoginPaths</param-name>
<param-value>login.jsp;reg.jsp;imageServlet;regServlet;checkUsernameServlet</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


LoginFilter

public class LoginFilter implements Filter{

private FilterConfig config;

@Override
public void destroy() {

}

@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {

HttpServletRequest request = (HttpServletRequest) req;
request.setCharacterEncoding("utf-8");
HttpServletResponse response = (HttpServletResponse) resp;
response.setContentType("text/html;charset=utf-8");
HttpSession session = request.getSession();

String noLoginPaths = config.getInitParameter("noLoginPaths");
if (config != null) {
String[] noLoginPathArray = noLoginPaths.split(";");
for (int i = 0; i < noLoginPathArray.length; i++) {
String noLoginPath = noLoginPathArray[i];
if (noLoginPath==null && "".equals(noLoginPath)) {
continue;
}else{
chain.doFilter(request, response);
return;
}
}
}
if (session.getAttribute("username") != null) {
chain.doFilter(req, resp);
}else{
response.sendRedirect("login.jsp");
}
}

@Override
public void init(FilterConfig arg0) throws ServletException {
config = arg0;
}

}


以上是实现了一个拦截过滤器只有登陆过后才能访问其他请求
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: