接口開發-攔截器

由於時間問題,直接說重點了。關於什麼是攔截器?SpringBoot應該怎麼集成?攔截器能作什麼用,請自行百度。html

經過攔截器,咱們要解決兩大問題,第1、跨域訪問;第2、用戶鑑權;java

 

1、文件目錄web

 

2、ApiInterceptorspring

package com.univalsoft.common.interceptor;

import com.univalsoft.common.model.APIResponse;
import com.univalsoft.tools.HttpTools;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Arrays;


public class ApiInterceptor implements HandlerInterceptor {

    //
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {

    }


    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView arg3)
            throws Exception {
    }

    // 攔截器
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        // 設置跨域訪問
        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
        response.setHeader("Access-Control-Allow-Methods", "*");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type");

        return true;

//        // 其餘業務判斷
//        String[] noAuthApis = {
//                "/api/account/login", // 登陸
//        };
//
//        String requestURI = request.getRequestURI();
//        if (!Arrays.asList(noAuthApis).contains(requestURI)) {
//            System.out.println("須要驗證");
//
//            boolean canRequest = true;
//            if (canRequest) {
//                return true;
//            } else {
//                APIResponse error = new APIResponse();
//                error.fail(APIResponse.ERROR_AUTH_FAIL, null);
//                HttpTools.sendJsonMessage(response, error);
//                return false;
//            }
//        }
//
//        System.out.println("攔截器執行完畢");
//        return true;
    }
}

  

3、ApiInterceptorConfapi

package com.univalsoft.common.interceptor;

import com.univalsoft.tools.PropertiesTools;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration
public class ApiInterceptorConf extends WebMvcConfigurationSupport {

    @Bean
    public HandlerInterceptor apiInterceptor() {
        return new ApiInterceptor();

    }

    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        // 註冊本身的攔截器
        // 攔截全部請求
        registry.addInterceptor(apiInterceptor()).addPathPatterns("/api/**");

        super.addInterceptors(registry);
    }


    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {

        // 接口文檔
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");

        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");

        // 圖片服務
        String _imagePath = PropertiesTools.applicationProperty("app.image.path");
        registry.addResourceHandler("/image/**")
                .addResourceLocations("file:" + _imagePath);

        // APP H5
        registry.addResourceHandler("/app/**")
                .addResourceLocations("classpath:/public/app/");

        super.addResourceHandlers(registry);
    }
}

 

通過上面的設置,接口的跨域訪問就解決了,關於用戶鑑權部分,註釋掉了,有興趣的能夠研究一下。  跨域

相關文章
相關標籤/搜索