springboot 入門八-自定義配置信息(編碼、攔截器、靜態資源等)


若想實際自定義相關配置,只需要繼承WebMvcConfigurerAdapter。WebMvcConfigurerAdapter定義些空方法用來重寫項目需要用到的WebMvcConfigure實現。具體寫法如下:

@Configuration
public class BootConfig  extends WebMvcConfigurerAdapter

@Configuration表示這是Java配置類;

 

一、編碼配置

在springmvc中使用在web.xml添加過濾器。

<filter>
        <filter-name>Set Character Encoding</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>Set Character Encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

在springboot中只需要要配置類中注入過濾器

@Bean
    public Filter characterEncodingFilter() {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(true);
        return characterEncodingFilter;
    }

 

二、攔截器interceptor

Interceptor是鏈式調用的,在一個應用中或者說是在一個請求中可以同時存在多個Interceptor。每個Interceptor 的調用會依據它的聲明順序依次執行。自定義攔截器需要實現HandlerInterceptor接口,重寫三個方法preHandle、postHandle、afterCompletion。

preHandle():  在業務處理器處理請求之前被調用。可以在這個方法中進行一些判斷來決定請求是否要繼續進行下去,返回boolean類型,返回false,表示請求結束,后續的Interceptor 和Controller都不會再執行

postHandle():  在當前請求進行處理之后。

afterCompletion():  是需要當前對應的Interceptor 的preHandle 方法的返回值為true 時才會執行。即完成整個請求結束之后,也就是在DispatcherServlet渲染了對應的視圖之后執行。這個方法的主要作用是用於進行資源清理工作的。

如:

public class BootInterceptor implements HandlerInterceptor {
    @Autowired
    private MemberService memberService;

........
}

如果攔截器中使用到其它類的調用,必需要對攔截器加入spring bean容器中管理。加入bean容器,需要使用@Bean注解,@Bean表示一種方法,產生一個bean的方法,並且交給Spring容器管理。

在自定義配置類中的寫法:

     @Bean
    public BootInterceptor bootInterceptor() {
        return new BootInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(bootInterceptor())
        .addPathPatterns("/**")
        .excludePathPatterns("/login");
        super.addInterceptors(registry);
    }

 

三、定義方法跳轉

在部分業務中,會出現跳轉但又沒任何具體的業務內容。

1、定義個controller方法處理跳轉

2、springMVC中在xml配置文件中加入

<mvc:view-controller path="/vc" view-name="index"/>    
<mvc:view-controller path="/vcr" view-name="redirect:index"/>
<mvc:redirect-view-controller redirect-url="index" path="/rvc"/>

3、springboot在定制的配置類中,重寫addViewControllers即可

@Override  
    public void addViewControllers(ViewControllerRegistry registry){  
        registry.addViewController("/login").setViewName("login");  
    }

 

 

四、靜態資源

@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/h/**").addResourceLocations("classpath:/html/");
    }

此配置比攔截器優先級要高,不需要經過攔截器。

 

五、CORS 跨域請求支持

跨源資源共享(CORS)是由大多數瀏覽器實現的W3C規范,它允許您以靈活的方式指定哪些跨域請求被授權,而不是使用諸如IFRAME或JSONP之類的安全性較弱的方法。可以配置全局的規則,也可以使用@CrossOrigin注解進行細粒度的配置。

CORS與JSONP相比
1、 JSONP只能實現GET請求,而CORS支持所有類型的HTTP請求。
2、 使用CORS,開發者可以使用普通的XMLHttpRequest發起請求和獲得數據,比起JSONP有更好的錯誤處理。
3、 JSONP主要被老的瀏覽器支持,它們往往不支持CORS,而絕大多數現代瀏覽器都已經支持了CORS

@Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**").maxAge(3000).allowCredentials(false);
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM