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

来源:互联网 发布:用js修改图片地址 编辑:程序博客网 时间:2024/05/16 05:12

捣鼓了一上午的一点点心得,贴出来大家分享下,见笑了。

上图为项目框架


().  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,至此问题得意解决。

原创粉丝点击