登入功能-攔截器應用
阿新 • • 發佈:2020-12-18
登入功能-攔截器應用
完整專案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; /** * @authorHP * @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(""); //放行的路徑 } }