• JSF中Filter的实现


    大概思路是 建一个filter  过滤除登陆页面的其他所有页面  在filter 里取到session 判断里面是否有值 如果有 则正常跳转  否则跳转到登陆页或你需要的指定页面即可~代码如下:
     
    在web.xml里面加上filter :

    <!-- 用户登录过滤器开始 -->

    <!-- 用户登录过滤器开始 --> 
    <filter> 
    <filter-name>checkLoginFilter </filter-name> 
    <filter-class>CheckLoginFilter </filter-class> 
    <init-param> 
    <param-name>checkSessionKey </param-name> 
    <param-value>LoginUser </param-value> 
    </init-param> 
    <init-param> 
    <param-name>redirectURL </param-name> 
    <param-value>/login.jsf </param-value> 
    </init-param> 
    <init-param> 
    <param-name>notCheckURLList </param-name> 
    <param-value>/login.jsf </param-value> 
    </init-param> 
    </filter> 
    <filter-mapping> 
    <filter-name>checkLoginFilter </filter-name> 
    <url-pattern>*.jsf </url-pattern> 
    </filter-mapping> 
    
    <!-- 用户登录过滤器结束 -->
    /** 
    * 用于检测用户是否登陆的过滤器,如果未登录,则重定向到指的登录页面 <p> 
    * 配置参数 <p> 
    * checkSessionKey 需检查的在 Session 中保存的关键字 <br/> 
    * redirectURL 如果用户未登录,则重定向到指定的页面,URL不包括 ContextPath <br/> 
    * notCheckURLList 不做检查的URL列表,以分号分开,并且 URL 中不包括 ContextPath <br/> 
    */ 
    public class CheckLoginFilter implements Filter 
    { 
        protected FilterConfig filterConfig = null; 
        private String redirectURL = null; 
        private List <String> notCheckURLList = new ArrayList <String>(); 
        private String sessionKey = null; 
    
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException{ 
        
        HttpServletRequest request = (HttpServletRequest) servletRequest; 
        HttpServletResponse response = (HttpServletResponse) servletResponse; 
        HttpSession session = request.getSession(); 
        response.setHeader("Cache-Control","no-cache"); 
        response.setHeader("Pragma","no-cache"); 
        response.setDateHeader ("Expires", -1); 
        if(sessionKey == null){ 
        filterChain.doFilter(request, response); 
        return; 
        } 
        if((!checkRequestURIIntNotFilterList(request)) && session.getAttribute(sessionKey) == null){ 
        response.sendRedirect(request.getContextPath() + redirectURL); 
        return; 
        } 
        filterChain.doFilter(servletRequest, servletResponse); 
        } 
    
        public void destroy(){ 
        notCheckURLList.clear(); 
        } 
    
        private boolean checkRequestURIIntNotFilterList(HttpServletRequest request){ 
        String uri = request.getServletPath() + (request.getPathInfo() == null ? "" : request.getPathInfo()); 
        return notCheckURLList.contains(uri); 
        } 
    
        public void init(FilterConfig filterConfig) throws ServletException{ 
        this.filterConfig = filterConfig; 
        redirectURL = filterConfig.getInitParameter("redirectURL"); 
        sessionKey = filterConfig.getInitParameter("checkSessionKey"); 
    
        String notCheckURLListStr = filterConfig.getInitParameter("notCheckURLList"); 
    
        if(notCheckURLListStr != null){ 
        StringTokenizer st = new StringTokenizer(notCheckURLListStr, ";"); 
        notCheckURLList.clear(); 
        while(st.hasMoreTokens()){ 
        notCheckURLList.add(st.nextToken()); 
        } 
        } 
        } 
    }

    此方法不足之处在于jsf的filter生命周期在jsf之前,登录页面的标签样式无法正常显示

  • 相关阅读:
    让我偷偷的告诉你:运维加薪的杀手锏是啥?
    网站页面优化必然趋势—WebP 图片!
    如何监控 Tomcat?Zabbix 与 Cloud Insight 对比
    网页增重不可控?试试 OneAPM Cloud Test
    提高 ASP.NET Web 应用性能的 24 种方法和技巧
    OneAlert 入门(三)——事件分析
    Cloud Insight 客户案例-晨芯时代科技有限公司
    Java开发快速上手
    微信小程序快速开发上手
    微信小程序快速开发上手
  • 原文地址:https://www.cnblogs.com/cxyzl/p/2643675.html
Copyright © 2020-2023  润新知