您的位置:首页 > 其它

基于Filter<过滤器>登录权限验证设计心得

2012-06-05 09:51 387 查看
捣鼓了一上午的一点点心得,贴出来大家分享下,见笑了。



上图为项目框架

(一).  PowerFilter.java代码部分:

package filters;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
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;

public class PowerFilter implements Filter{
    public void init(FilterConfig arg0) throws ServletException {
    }
    public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)    throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        HttpSession session = req.getSession(true);
        System.out.println("+-+-+-+-+-+权限验证测试+-+-+-+-+-+-+");
        if (session.getAttribute("adminName") != null) {
            chain.doFilter(request, response);
        } else {
            res.sendRedirect("../adminlogin.jsp");
//            RequestDispatcher dispatcher = request.getRequestDispatcher("../adminlogin.jsp");   

//            dispatcher.forward(request, response);

            System.out.println("验证失败!");
        }
    }
    public void destroy() {
    }
}

(二).  web.xml中的Filter配置信息(为了看的清晰我就全贴出来了)
<filter>

        <filter-name>Set Character Encoding</filter-name>

        <filter-class>filters.SetCharacterEncodingFilter</filter-class>

        <init-param>

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

            <param-value>gb2312</param-value>

        </init-param>

    </filter>

   

    <filter>

        <filter-name>struts2</filter-name>

        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

    </filter>

   

    <filter>

           <filter-name>PowerFilter</filter-name>

        <filter-class>filters.PowerFilter</filter-class>

    </filter>

    <filter-mapping>

            <filter-name>Set Character Encoding</filter-name>

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

    </filter-mapping>

   

    <filter-mapping>

        <filter-name>struts2</filter-name>

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

    </filter-mapping>

   

    <filter-mapping>

        <filter-name>PowerFilter</filter-name>

        <url-pattern>/bakpages/*</url-pattern>

    </filter-mapping>

   

    <listener>

        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

    </listener>

   

    <welcome-file-list>

      <welcome-file>jump.jsp</welcome-file>

    </welcome-file-list>

注意一下在判断session为空时的情况,实验多次,每次都是进入死循环,走了不少弯路,后来领悟到adminlogin.jsp页面的位置有问题,一开始是放在/bakpages/下面,导致在过滤不存在重定向的时候再次进入了doFilter方法,所以循环继续。因此需要把adminlogin.jsp放到/bakpages/文件夹之外,当与其同目录层次时写成../adminlogin.jsp
,OK,至此问题得意解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐