• jsp filter登录限制过滤器


     

    http://www.cnblogs.com/hemingwang0902/archive/2012/01/09/2316956.html

    UserFilter.java

    package filter;

    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.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.apache.commons.lang.StringUtils;


    public class UserFilter implements Filter {
     
     
     private String sessionKey;
     
     
     private String excepUrl;
     
     
     private String redirectUrl;
     
     public void init(FilterConfig cfg) throws ServletException {
      sessionKey = cfg.getInitParameter("sessionKey");
      redirectUrl = cfg.getInitParameter("redirectUrl");
      excepUrl = cfg.getInitParameter("excepUrl");
     }
     
     
     public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
      // 如果 sessionKey 为空,则直接放行
      if (StringUtils.isBlank(sessionKey)) {
       chain.doFilter(req, res);
       return;
      }
    //      * 请求 http://127.0.0.1:8080/webApp/home.jsp?&a=1&b=2 时
    //          * request.getRequestURL(): http://127.0.0.1:8080/webApp/home.jsp
    //         * request.getContextPath(): /webApp 
    //         * request.getServletPath():/home.jsp
    //         * request.getRequestURI(): /webApp/home.jsp
    //         * request.getQueryString():a=1&b=2
      HttpServletRequest request = (HttpServletRequest) req;
      HttpServletResponse response = (HttpServletResponse) res;
      String servletPath = request.getServletPath();//当前页面的路径(如"/index.jsp")
      // 如果请求的路径与redirectUrl(将要跳转的页面)相同,或请求的路径是排除的URL时,则直接放行
      if (servletPath.equals("/"+redirectUrl) || excepUrl.contains(servletPath)) {
       chain.doFilter(req, res);
       return;
      }
      
      Object sessionObj = request.getSession().getAttribute(sessionKey);
      // 如果Session为空,则跳转到指定页面
       if (sessionObj == null) {
       response.sendRedirect(redirectUrl);
        } else {
         chain.doFilter(req, res);
       }
       }
     
     public void destroy() {
      
     }

    }

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

     <filter>

        <filter-name>UserFilter</filter-name>

        <filter-class>filter.UserFilter</filter-class>

        <init-param>

                 <description>

                  将当前登录的用户的信息保存在 session 中时使用的key,

                  如果没有配置此参数,则该过滤器不起作用

                 </description>

              <param-name>sessionKey</param-name>

              <param-value>userInfo</param-value>

        </init-param>

        <init-param>

            <description>

                      如果用户未登录(即在 session 中 key 为 sessionKey 的属性不存在或为空),

                      则将请求重定向到该 url。该 url 不包含web应用的 ContextPath。

                    如果不配置此参数,则在用户未登录系统的情况下,直接重定向到web应用的根路径(/)      

            </description>

                <param-name>redirectUrl</param-name>

                <param-value>index.jsp</param-value>

           </init-param>

           <init-param>

                 <description>

                                      不需要进行拦截的 url,即:如果当前请求的 url 的 servletPath 能在此excepUrl里,则直接放行(即使未登录系统)。

                                       格式如(/checkuser.jsp /up.jsp)            

                 </description>

                 <param-name>excepUrl</param-name>

                 <param-value>/checkuser.jsp</param-value>

          </init-param>

     </filter>

                         

    <filter-mapping>

        <filter-name>UserFilter</filter-name>

        <url-pattern>*.jsp</url-pattern>

    </filter-mapping>

     <welcome-file-list>

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

     </welcome-file-list>

     <login-config>

      <auth-method>BASIC</auth-method>

     </login-config>

    </web-app>

  • 相关阅读:
    推荐前端开发使用的服务器环境开源项目 D2Server 可替代Apache
    JavaScript正则表达式的坑很深
    NodeJS + Sequelize + Mysql + Vue + Bootstrap
    wampserver使用过程中遇到的问题及相关配置
    生成解决方案时,无法导入以下密钥文件
    使用Image.GetThumbnailImage 方法返回缩略图
    C#操作xml文件进行增、删、改
    MessageBox.Show()时MessageBoxIcon的显示
    通过反射获取对象属性、属性的值,设置对象属性的值
    常用文档处理技巧
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/4350901.html
Copyright © 2020-2023  润新知