当前位置:软件学习 > 其它软件 >>

过滤器[登录+编码]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 { 
        

补充:软件开发 , 其他 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,