过滤器[登录+编码]filter在程序中的使用
虽然很久没有写WEB程序了,但依然怀念那些写WEB和日子。看了下以前的毕业设计,从中提取说一些小例子。写在这里。
这里讲解的是其中filter中使用。主要用于两个方面。一个是编码的设置和登录的拦截验证。
众所周知,java的乱码有时是个很头疼的问题。你不是不在每个页面定义一个编码,还得在每个servlet或action中定义编码。
通常见到这样的几行代码:
[java]
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
这对于一个庞大的系统来说,显得有点太多余。
我们要做一就是简化开发,提高效率。
[html]
<!--配置过滤器-->
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.tudou.projectmanage.filters.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<!--过滤处理访问/view/admin下所有资源的请求-->
<url-pattern>/view/admin/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.tudou.projectmanage.filters.EncodingFilter</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>/*</url-pattern>
</filter-mapping>
上面定义两个过滤器,一个用于拦截登录[admin文件夹下为需要过滤的主界面,此处为管理后台页面,注:login.jsp等页面不在此列,如果你连login页面都过滤了,你还指望谁来登录你的网站呢。]
[html]
<!--过滤处理访问/view/admin下所有资源的请求-->
<url-pattern>/view/admin/*</url-pattern>
一个用于处理编码
[html]
<url-pattern>/*</url-pattern>
。
写一个过滤器,继承Filter即可。实现其中的doFilter方法。在其init方法初始化编码即可。这样一个编码的拦截器就实现了。
[java]
package com.tudou.projectmanage.filters;
/**
* 处理乱码
* @author tudou
* @date 2011-06-02
*/
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.HttpServlet;
@SuppressWarnings("serial")
public class EncodingFilter extends HttpServlet implements Filter {
FilterConfig config;
private String encoding = null;
public EncodingFilter() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
if (encoding != null) {
request.setCharacterEncoding(encoding);
response.setContentType("text/html;charset="+encoding);
}
filterChain.doFilter(request, response);
}
public void init(FilterConfig config) throws ServletException {
this.config = config;
encoding = config.getInitParameter("encoding");
}
@Override
public void destroy() {
config = null;
}
}
同理登录拦截是一样的道理,只是处理方式略有不同。
[java]
package com.tudou.projectmanage.filters;
/**
* 此类用于拦截登录
* 配置于web.xml节点的filter
* @author tudou
* @date 2011-06-02
*/
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.tudou.projectmanage.persist.Users;
@SuppressWarnings("serial")
public class LoginFilter extends HttpServlet implements Filter {
/**
*
*/
FilterConfig config;
public LoginFilter() {
}
/**
* 核心过滤器 防止前台非法访问!!! 查询条件为memberTypeName是管理员并且未被禁用 3重验证
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = req.getSession(true);
Users user = (Users) session.getAttribute("user");
if (user != null) {
filterChain.doFilter(req, res);//用户验证通过
return;
} else {
 
补充:软件开发 , 其他 ,