注:本文以Febs项目 github shiro框架集成相关配置文件为例
java实现activemq远程监控(基于springBoot)yml动态配置 中也有应用,但是不全
1.springBoot application.yml 文件
# febs 配置
febs:
# 是否在控制台打印 sql语句
showsql: true
# 时间类型参数在前端页面的展示格式,默认格式为 yyyy-MM-dd HH:mm:ss
timeFormat: yyyy-MM-dd HH:mm:ss
# 是否开启 AOP 日志,默认开启
openAopLog: true
shiro:
# shiro redis缓存时长,默认1800秒
expireIn: 1800
# session 超时时间,默认1800000毫秒
sessionTimeout: 1800000
# rememberMe cookie有效时长,默认86400秒,即一天
cookieTimeout: 86400
# 免认证的路径配置,如静态资源,druid监控页面,注册页面,验证码请求等
anonUrl: /css/**,/js/**,/fonts/**,/img/**,/druid/**,/user/regist,/gifCode,/,/actuator/**,/test/**
# 登录 url
loginUrl: /login
# 登录成功后跳转的 url
successUrl: /index
# 登出 url
logoutUrl: /logout
# 未授权跳转 url
unauthorizedUrl: /403
# 验证码
validateCode:
# 宽度,默认 146px
width: 146
# 高度,默认 33px
height: 33
# 验证码字符个数,默认4个字符
length: 4
2.java中对应的实例
1.FebsProperties 对应yml中的febs:
@ConfigurationProperties(prefix = "febs") 为关键部分
类属性的命名对应yml中相关的命名
package cc.mrbird.common.config;
import cc.mrbird.common.domain.ValidateCodeProperties;
import cc.mrbird.common.shiro.ShiroProperties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "febs")
@Data
public class FebsProperties {
private ShiroProperties shiro = new ShiroProperties();
private ValidateCodeProperties validateCode = new ValidateCodeProperties();
private String timeFormat = "yyyy-MM-dd HH:mm:ss";
private boolean openAopLog = true;
}
2.ShiroProperties 对应yml中的febs:子级 shiro:
package cc.mrbird.common.shiro;
import lombok.Data;
@Data
public class ShiroProperties {
// shiro redis缓存时长,默认值 1800 秒
private int expireIn = 1800;
// session 超时时间,默认 1800000毫秒
private long sessionTimeout = 1800000L;
// rememberMe 有效时长,默认为 86400 秒,即一天
private int cookieTimeout = 86400;
private String anonUrl;
private String loginUrl = "/login";
private String successUrl = "/index";
private String logoutUrl = "/logout";
private String unauthorizedUrl;
}
3.ValidateCodeProperties 对应yml中的febs:子级 validateCode:
package cc.mrbird.common.domain;
import lombok.Data;
@Data
public class ValidateCodeProperties {
// 验证码图片宽度
private int width = 146;
// 验证码图片高度
private int height = 33;
// 验证码字符位数
private int length = 4;
}
3.使用方法
1.autowired注入类属性
2.通过get方法直接获取即可
注:以下为部分代码片段,只说明使用方法,并不完整
@Configuration
public class ShiroConfig {
@Autowired
private FebsProperties febsProperties;
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
Map<String, Filter> filters = shiroFilterFactoryBean.getFilters();//获取filters
filters.put("user", new CustomUserFilter());
// 设置 securityManager
shiroFilterFactoryBean.setSecurityManager(securityManager);
// 登录的 url
shiroFilterFactoryBean.setLoginUrl(febsProperties.getShiro().getLoginUrl());
// 登录成功后跳转的 url
shiroFilterFactoryBean.setSuccessUrl(febsProperties.getShiro().getSuccessUrl());
// 未授权 url
shiroFilterFactoryBean.setUnauthorizedUrl(febsProperties.getShiro().getUnauthorizedUrl());
LinkedHashMap<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
// 设置免认证 url
String[] anonUrls = StringUtils.splitByWholeSeparatorPreserveAllTokens(febsProperties.getShiro().getAnonUrl(), ",");
for (String url : anonUrls) {
filterChainDefinitionMap.put(url, "anon");
}
// 配置退出过滤器,其中具体的退出代码 Shiro已经替我们实现了
filterChainDefinitionMap.put(febsProperties.getShiro().getLogoutUrl(), "logout");
// 除上以外所有 url都必须认证通过才可以访问,未通过认证自动访问 LoginUrl
filterChainDefinitionMap.put("/**", "user");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
}