SSM項目使用攔截器實現登錄驗證功能

登錄接口實現

public User queryUser(String UserName, String Password,HttpServletRequest request, HttpServletResponse response) {
        User user = userMapper.queryUser(UserName,Password);
        if(!StringUtils.isEmpty(user)){
            //1.獲取session
            HttpSession session = request.getSession();
            //2.獲取sessionid
            String sessionId = session.getId();
            //3.將sessionid作為key,用戶信息user作為value,放入session中
            session.setAttribute(sessionId,user);
            //4.將sessionId存到cookie中,"JSESSIONID"為自定義的key值
            Cookie cookie = new Cookie("JSESSIONID",sessionId);
            //5.設置cookie的有效路徑
            cookie.setPath(request.getContextPath());
            //6.將cookie返回給頁面
            response.addCookie(cookie);
        }
        return user;
    }

代碼思路:

1.用戶輸入賬號密碼登錄成功後獲取用戶信息(User)

2.獲取session,得到sessionid(註:每一個session對象都有一個sessionid)

3.將sessionid作為key,用戶信息(User)作為value,放入session中

4.創建一個Cookie對象,將"JSESSIONID"作為key,sessionId作為value,放入cookie中

5.設置cookie的有效路徑,將cookie返回給頁面,此時頁面就可以收到key為"JSESSIONID",value為sessionId的cookie信息,如下圖。

攔截器類代碼實現

public class Filter extends HandlerInterceptorAdapter {
    private static Logger logger = Logger.getLogger(Filter.class);
    /**
     * 進入攔截器後首先進入的方法
     * 返回false則不再繼續執行
     * 返回true則繼續執行
     */
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response, Object handler)throws Exception
    {
        //1.定義sessionid變量
        String sessionid = "";
        //2.獲取session對象
        HttpSession session=request.getSession();
        //3.獲取頁面上所有的cookie
        Cookie[] cookies = request.getCookies();
        //4.循環尋找名稱為"JSESSIONID"的cookie
        for(Cookie cookie:cookies){
            if(cookie.getName().equals("JSESSIONID")){
                sessionid = cookie.getValue();
            }
        }
        //5.根據sessionid獲取用戶信息
        User user = (User) session.getAttribute(sessionid);
        if(StringUtils.isEmpty(user)) {
            logger.info("用戶未登錄");
            //用戶未登錄跳轉到登錄頁面
            response.sendRedirect("login");
            return false;
        }
        logger.info("用戶已登錄");
        return  true;
    }

}

代碼思路:

1.自定義一個攔截器類,首先要繼承HandlerInterceptorAdapter,並重寫preHandle方法,在此方法中編寫攔截器的邏輯代碼

2.獲取cookies數組,這個數組有瀏覽器中的所有cookies信息,循環遍歷找到name為"JSESSIONID"的cookies,並獲取到其value值,這個值就是sessionid

3.通過sessionid查找user對象,如果能獲取對象證明登錄過,如果不能獲取到對象證明沒有登錄過

4.如果登錄過就直接訪問接口,如果沒有登錄過就跳轉到登錄頁面進行登錄

配置文件實現

<!--自定義攔截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--配置要攔截的路徑-->
            <mvc:mapping path="/**"/>
            <!--配置登錄接口不被攔截-->
            <mvc:exclude-mapping path="/user/login"/>
            <!--指定攔截器類路徑-->
            <bean class="com.lishiqi.Util.Filter"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

配置含義:

1.我們使用攔截器肯定要規定攔截哪些接口,首先我們將所有的接口都攔截

2.然後我們發現問題,此時登錄接口也在攔截范圍中,所以我們正常調用登錄接口之前他也會攔截判斷一下用戶是否登錄過,這個時候用戶肯定沒有登錄過,那麼就會又跳轉到登錄界面,我們再次登錄還是跳轉到登錄頁面,一直登錄不上,所以我們需要把登錄接口配置為不攔截

3.然後我們指定我們配置好的攔截器類路徑,這個時候可以在該類中進行登錄驗證操作瞭

4.此配置文件為spring-mvc.xml配置文件

到此這篇關於SSM項目使用攔截器實現登錄驗證功能的文章就介紹到這瞭,更多相關SSM 攔截器登錄驗證內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: