美文网首页
spring boot 之 starter

spring boot 之 starter

作者: _大叔_ | 来源:发表于2020-04-02 16:53 被阅读0次

一、starter依赖

新建一个spring boot工程。

        <!-- 包含了log 以及 autoconfigure 等 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <!-- 对 @ConfigurationProperties 的处理 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
        </dependency>

二、添加配置类

package com.xianwt.cloud.properties;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @Author big uncle
 * @Date 2019/11/27 9:27
 **/
@ConfigurationProperties(prefix = "security.authentication")
@Data
public class AuthenticationProperties {

    /**
     * token
    **/
    private String userToken = "USER:TOKEN:";
    /**
     * 拦截
    **/
    private String authorization = "Authorization";
    /**
     * 默认参数用户
     **/
    private String userKey = "default:user:";
    /**
     * 权限
    **/
    private String authorityKey = "USER:AUTHORITY:";
    /**
     * 用户访问资源锁 默认不拦截
    **/
    private Boolean authorityLock = false;
    /**
     * 项目过滤集合, 以逗号分割
    **/
    private List<String> projectUrl;
    /**
     * 特殊路径放弃拦截,走非 RequestData 方式
     **/
    private List<String> specialUrl;
    /**
     * 失败处理器
    **/
    private String failureUrl = "/failure/authenticationFilter";

}

三、添加加载类

package com.xianwt.cloud.properties;

/**
 * @Author big uncle
 * @Date 2020/3/29 10:58
 * @module
 **/

import com.xianwt.cloud.cep.AuthenticationCep;
import com.xianwt.cloud.cep.AuthorizationCep;
import com.xianwt.cloud.cep.ProjectUrlFilterCep;
import com.xianwt.cloud.cep.SpecialFilterCep;
import com.xianwt.cloud.cep.impl.AuthenticationCepImpl;
import com.xianwt.cloud.cep.impl.AuthorizationCepImpl;
import com.xianwt.cloud.cep.impl.ProjectUrlFilterCepImpl;
import com.xianwt.cloud.cep.impl.SpecialFilterCepImpl;
import com.xianwt.cloud.filter.AuthenticationFilter;
import com.xianwt.cloud.server.AuthenticationServerSource;
import com.xianwt.cloud.server.AuthorizationServerSource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;

@Configuration
@EnableConfigurationProperties({AuthenticationProperties.class})
public class AuthenticationConfiguration {

    private static final Log log = LogFactory.getLog(AuthenticationFilter.class);

    @Autowired
    private AuthenticationProperties authenticationProperties;


    public ProjectUrlFilterCep projectUrlFilterCep(){
        return new ProjectUrlFilterCepImpl(authenticationProperties);
    }

    public SpecialFilterCep specialFilterCep(){
        return new SpecialFilterCepImpl(authenticationProperties);
    }

    @Bean
    public AuthenticationCep authenticationCep(AuthenticationServerSource authenticationServerSource){
        AuthenticationCepImpl authenticationCep = new AuthenticationCepImpl(authenticationProperties,authenticationServerSource);
        return authenticationCep;
    }

    @Bean
    public AuthorizationCep authorizationCep(AuthorizationServerSource authorizationServerSource){
        AuthorizationCepImpl authenticationCep = new AuthorizationCepImpl(authenticationProperties,authorizationServerSource);
        return authenticationCep;
    }


    @Bean
    public FilterRegistrationBean<AuthenticationFilter> testFilterRegistration(AuthenticationCep authenticationCep,AuthorizationCep authorizationCep) {
        FilterRegistrationBean<AuthenticationFilter> registration = new FilterRegistrationBean<>();
        AuthenticationFilter authenticationFilter = AuthenticationFilter.builder()
                .authenticationProperties(authenticationProperties)
                .specialFilterCep(specialFilterCep())
                .projectUrlFilterCep(projectUrlFilterCep())
                .authenticationCep(authenticationCep)
                .authorizationCep(authorizationCep)
                .build();
        registration.setFilter(authenticationFilter);
        //配置过滤路径
        registration.addUrlPatterns("/*");
        //设置filter名称
        registration.setName("authenticationFilter");
        //请求中过滤器执行的先后顺序,值越小越先执行
        registration.setOrder(1);
        return registration;
    }

}

最主要得就是注解,至于业务逻辑大家都是写自己得。

四、指定加载文件路径

在resources目录下新建META-INF文件夹,在META-INF文件夹下在新建 spring.factories文件,且在文添加以下内容

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.xianwt.cloud.properties.AuthenticationConfiguration

不出问题大家发布后,在别的项目依赖自己的jar就可以了。

五、介绍下其他条件装配注解

@ConditionalOnBean 在当前上下文中存在某个对象时,才会实例化一个Bean
@ConditionalOnMissingBean 在当前上下文中不存在某个对象时,才会实例化一个Bean
@Conditiona lOnClass 表示当 class path 有指定的类时,配置生效。
@ConditionalOnMissingClass 表示当 classpath 中没有指定的类的时候,配置生效。
@ConditionalOnProperty 注解根据 name 来读取 Spring Boot的 Environment的 变量包含的属
性,根据其值与 havingValue 的值比较结果决定配置是否生效。如果没有指定 havingValue ,只
要属性不为 false ,配置都能生效。matcblfMissing 为例 意味着如果 Environment 没有包含“message.center.enabled ”,配置也能生效,默认为 false。
@ConditionalOnExpression ,当表达式为 true 时,才会实例化一个Bean ,支持 SpEL表达式,比如根据配置文件中的某个值来决定配置是否生效。
@ConditionalOnJava ,当存在指定的 Java 版本的时候。

相关文章

网友评论

      本文标题:spring boot 之 starter

      本文链接:https://www.haomeiwen.com/subject/yavyuhtx.html