1. 程式人生 > 實用技巧 >登入功能-攔截器應用

登入功能-攔截器應用

登入功能-攔截器應用

完整專案GitHub:https://github.com/MaoYanMovieWeb/maoyanmovie

在登入功能實現時,如果需要許可權控制,若不使用安全框架,使用簡單的方式可以使用攔截器。

攔截器首先先自定義攔截器,將這個自定義攔截器註冊,設定需要攔截和放行的域名。

在目錄檔案下建立interceptor資料夾,建立Interceptor,java檔案,繼承HandlerInterceptor介面,同時OverRide三個方法。在preHandler中編寫攔截處理程式碼。

返回 true/false 表示放行/攔截。

同時將靜態檔案放行,通過session判斷是否登入,未登入則攔截。

package com.hut.maoyanmovie.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * @author
HP * @data 2020-12-14 * *新建攔截器 * * 自定義攔截器 */ public class AuthInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 攔截處理程式碼 //靜態資源不被攔截器攔截 String uri = request.getRequestURI();
if (uri.endsWith("js")||uri.endsWith("css")||uri.endsWith("jpg")||uri.endsWith("svg")||uri.endsWith("jpg")||uri.endsWith("png")){ return true ; } HttpSession session = request.getSession(); // 獲取使用者資訊,如果沒有使用者資訊直接返回提示資訊 Object userInfo = session.getAttribute("loginUser"); if (userInfo == null) { request.setAttribute("msg","請先登入!"); request.getRequestDispatcher("logging").forward(request, response); return false; } return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }

自定義攔截器後,需要註冊攔截器。

新建WebAppConfig.java檔案,繼承WebMvcConfigurerAdapter類,重寫addInterceptor方法。同時加入@Configuration註解,在springboot啟動的時候就會該配置類就會被掃描並載入。

package com.hut.maoyanmovie.interceptor;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**
 * @author HP
 * @data 2020-12-14
 * 註冊攔截器
 * 新建配置類繼承WebMvcConfigurerAdapter類,重寫addInterceptors方法
 */
@Configuration
public class WebAppConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //註冊自己的攔截器並設定攔截的請求路徑
        registry.addInterceptor(new AuthInterceptor())
                .addPathPatterns("/interorders/**")
                .addPathPatterns("/Getcid/**")
                .addPathPatterns("/add/**")
                .addPathPatterns("/upload/**")//攔截的路徑 
                .excludePathPatterns(""); //放行的路徑
    }

}

此時已經可以攔截了,訪問對應域名會彈出拒絕訪問資訊。