第三章(三自學)擴充套件

weixin_34037977發表於2019-01-04

3)靜態首頁的支援

demo-web3工程

預設把靜態index.html檔案放置在如下目錄

classpath:/META-INF/resources/index.html
classpath:/resources/index.html
classpath:/static/index.html
classpath:/public/index.html

當我們訪問應用根目錄http://localhost:8080/時,會直接對映

注意:如果配置了自己的靜態檔案訪問路徑,則必須放到自己的目錄下,即我們做了1.1配置則把檔案放到src/main/webapp/static目錄下

使用總結:

  1. 不在application.properties裡做靜態資源配置(*.html的可以放到預設目錄下)。
  2. js,css,images等在*.java裡配置訪問許可權。

4)配置攔截器(瞭解)

demo-web4工程
自定義一個配置類,實現WebMvcConfigurer介面
重寫addInterceptors方法
addInterceptor方法,新增自定義的攔截器
addPathPatterns方法,攔截的uri
excludePathPatterns方法,排除攔截的uri

step1 定義攔截器,同springmvc寫法implements HandlerInterceptor

package com.neuedu.demo.interceptor;

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

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

public class HandlerInterceptor1 implements HandlerInterceptor{

//進入 Handler方法之前執行
//用於身份認證、身份授權
//比如身份認證,如果認證不通過表示當前使用者沒有登陸,需要此方法攔截不再向下執行
@Override
public boolean preHandle(HttpServletRequest request,
        HttpServletResponse response, Object handler) throws Exception {
    
    System.out.println("HandlerInterceptor1...preHandle");
    
    //return false表示攔截,不向下執行
    //return true表示放行
    return true;
}

//進入Handler方法之後,返回modelAndView之前執行
//應用場景從modelAndView出發:將公用的模型資料(比如選單導航)在這裡傳到檢視,也可以在這裡統一指定檢視
@Override
public void postHandle(HttpServletRequest request,
        HttpServletResponse response, Object handler,
        ModelAndView modelAndView) throws Exception {
    
    System.out.println("HandlerInterceptor1...postHandle");
    
}

//執行Handler完成執行此方法
//應用場景:統一異常處理,統一日誌處理
@Override
public void afterCompletion(HttpServletRequest request,
        HttpServletResponse response, Object handler, Exception ex)
        throws Exception {
    
    System.out.println("HandlerInterceptor1...afterCompletion");
}

}

HandlerInterceptor2(略)

step2 配置使用攔截器,addPathPatterns為攔截哪些地址,excludePathPatterns為排除哪些地址

   @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //將靜態資源排除在攔截之外
         registry.addInterceptor(new HandlerInterceptor1()).addPathPatterns("/**");
         registry.addInterceptor(new HandlerInterceptor2()).addPathPatterns("/**")
         .excludePathPatterns("/index.html","/","/static/**");
    }

測試:
http://localhost:8080/static/index.html 不會被攔截
http://localhost:8080/hello2 會被攔截

相關文章