zoukankan      html  css  js  c++  java
  • 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);
        }

  • 相关阅读:
    Apache HTTP Server 与 Tomcat 的三种连接方式介绍(转)
    Java实现二叉树遍历以及常用算法
    随想-经验
    Java代码检查工具
    MongoDB学习笔记-维护
    脏检查
    html5对密码加密
    JavaSript模块化-AMD规范与CMD规范
    AngularJS的$watch用法
    常用的几个小函数
  • 原文地址:https://www.cnblogs.com/song27/p/7542803.html
Copyright © 2011-2022 走看看