一、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 版本的时候。












网友评论