欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java中使用Filter控制用戶登錄權限具體實例

 更新時間:2013年06月19日 11:13:00   作者:  
java中使用Filter控制用戶登錄權限具體實例,需要的朋友可以參考一下

學jsp這么長時間,做的項目也有七八個了,可所有的項目都是用戶登錄就直接跳轉到其擁有權限的頁面,或者顯示可訪問頁面的鏈接。使用這種方式來幼稚地控制訪問權限。從來沒有想過如果我沒有登錄,直接輸入地址也可以直接訪問用戶的頁面的。

在jsp中權限的控制是通過Filter過濾器來實現(xiàn)的,所有的開發(fā)框架中都集成有Filter,如果不適用開發(fā)框架則有如下實現(xiàn)方法:

LoginFilter.java

復制代碼 代碼如下:

public class LoginFilter implements Filter { 

    private String permitUrls[] = null; 

    private String gotoUrl = null; 

    public void destroy() { 

        // TODO Auto-generated method stub 

        permitUrls = null; 

        gotoUrl = null; 

    } 

    public void doFilter(ServletRequest request, ServletResponse response, 

            FilterChain chain) throws IOException, ServletException { 

        // TODO Auto-generated method stub 

        HttpServletRequest res=(HttpServletRequest) request; 

        HttpServletResponse resp=(HttpServletResponse)response; 

        if(!isPermitUrl(request)){ 

            if(filterCurrUrl(request)){ 

                System.out.println("--->請登錄"); 

                resp.sendRedirect(res.getContextPath()+gotoUrl); 

                return; 

            } 

        } 

        System.out.println("--->允許訪問"); 

        chain.doFilter(request, response); 

    } 

    public boolean filterCurrUrl(ServletRequest request){ 

        boolean filter=false; 

        HttpServletRequest res=(HttpServletRequest) request; 

        User user =(User) res.getSession().getAttribute("user"); 

        if(null==user) 

            filter=true; 

        return filter; 

    }       

    public boolean isPermitUrl(ServletRequest request) { 

        boolean isPermit = false; 

        String currentUrl = currentUrl(request); 

        if (permitUrls != null && permitUrls.length > 0) { 

            for (int i = 0; i < permitUrls.length; i++) { 

                if (permitUrls[i].equals(currentUrl)) { 

                    isPermit = true; 

                    break; 

                } 

            } 

        } 

        return isPermit; 

    }        

    //請求地址 

    public String currentUrl(ServletRequest request) {   

        HttpServletRequest res = (HttpServletRequest) request; 

        String task = request.getParameter("task"); 

        String path = res.getContextPath(); 

        String uri = res.getRequestURI(); 

        if (task != null) {// uri格式 xx/ser 

            uri = uri.substring(path.length(), uri.length()) + "?" + "task="

                    + task; 

        } else { 

            uri = uri.substring(path.length(), uri.length()); 

        } 

        System.out.println("當前請求地址:" + uri); 

        return uri; 

    } 

    public void init(FilterConfig filterConfig) throws ServletException { 

        // TODO Auto-generated method stub 

        String permitUrls = filterConfig.getInitParameter("permitUrls"); 

        String gotoUrl = filterConfig.getInitParameter("gotoUrl"); 

  

        this.gotoUrl = gotoUrl; 

  

        if (permitUrls != null && permitUrls.length() > 0) { 

            this.permitUrls = permitUrls.split(","); 

        } 

    } 

}


Web.xml

復制代碼 代碼如下:

<filter> 

    <filter-name>loginFilter</filter-name> 

    <filter-class>filter.LoginFilter</filter-class> 

  

    <init-param> 

        <param-name>ignore</param-name> 

        <param-value>false</param-value> 

    </init-param> 

    <init-param> 

        <param-name>permitUrls</param-name> 

        <param-value>/,/servlet/Loginservlet?task=login,/public.jsp,/login.jsp</param-value> 

    </init-param> 

    <init-param> 

        <param-name>gotoUrl</param-name> 

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

    </init-param> 

</filter> 

<filter-mapping> 

    <filter-name>loginFilter</filter-name> 

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

</filter-mapping>

這短代碼主要實現(xiàn)了用戶登錄的過濾,權限過濾原理相同。只需要把判斷用戶是否登錄換成是否有權限就可以了!

相關文章

  • Java中Semaphore信號量的方法解析

    Java中Semaphore信號量的方法解析

    這篇文章主要介紹了Java中Semaphore信號量的方法解析,??Semaphore信號量是用來控制同?時訪問?特定?資?源的?線?程數(shù)量,它通?過協(xié)調?各個?線?程,以保證合理的使用公共?資源,需要的朋友可以參考下
    2023-12-12
  • 深入理解Java 線程池

    深入理解Java 線程池

    這篇文章主要介紹了Java 線程池的相關資料,文中講解非常細致,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • JavaWeb中的Response常用方法解析

    JavaWeb中的Response常用方法解析

    這篇文章主要介紹了JavaWeb中的Response常用方法解析,response對象是用來對客戶端進行響應的當瀏覽器發(fā)出請求時,?Web容器創(chuàng)建一個ServletRequest對象封裝請求信息,一個ServletResponse對象封裝響應信息,對象作為Servlet的service()方法中的參數(shù),需要的朋友可以參考下
    2023-11-11
  • 基于SpringIOC創(chuàng)建對象的四種方式總結

    基于SpringIOC創(chuàng)建對象的四種方式總結

    這篇文章主要介紹了基于SpringIOC創(chuàng)建對象的四種方式總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 詳解feign調用session丟失解決方案

    詳解feign調用session丟失解決方案

    這篇文章主要介紹了詳解feign調用session丟失解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-02-02
  • 分頁技術原理與實現(xiàn)之Java+Oracle代碼實現(xiàn)分頁(二)

    分頁技術原理與實現(xiàn)之Java+Oracle代碼實現(xiàn)分頁(二)

    這篇文章主要介紹了分頁技術原理與實現(xiàn)的第二篇:Java+Oracle代碼實現(xiàn)分頁,感興趣的小伙伴們可以參考一下
    2016-06-06
  • IDEA創(chuàng)建Servlet并配置web.xml的實現(xiàn)

    IDEA創(chuàng)建Servlet并配置web.xml的實現(xiàn)

    這篇文章主要介紹了IDEA創(chuàng)建Servlet并配置web.xml的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 詳解Spring Boot 自定義PropertySourceLoader

    詳解Spring Boot 自定義PropertySourceLoader

    這篇文章主要介紹了詳解Spring Boot 自定義PropertySourceLoader,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Spring整合Mybatis框架方法剖析

    Spring整合Mybatis框架方法剖析

    這篇文章主要為大家介紹了Spring整合Mybatis框架方法剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • java常用Lambda表達式使用場景源碼示例

    java常用Lambda表達式使用場景源碼示例

    這篇文章主要為大家介紹了java常用Lambda表達式使用場景源碼示例及應用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03

最新評論