关于使用配置文件(续)
需要注意:所有自定义配置推荐使用公司名称、项目名称等不容易冲突的名称作为自定义配置的属性名前缀,并且,属性名不必太过于简短,更重要的是不能冲突,且清晰的表达意思!
关于JWT的配置,secretKey和有效时长都应该写到配置文件中,例如:
# 当前项目的自定义配置
csmall:
# JWT配置
jwt:
# 生成和解析JWT的secretKey,注意:此值应该是不易被预测的,且需要保密
secret-key: gfd89uiKa89J043tAFrflkji9432kjfdsajm
# JWT的有效时长,以分钟为单位,表现用户成功登录后,登录信息的有效时长
duration-in-minute: 14400
然后,在项目中通过@Value注解读取以上配置并应用,例如:
@Value("${csmall.jwt.secret-key}")
private String secretKey;
@Value("${csmall.jwt.duration-in-minute}")
private Long durationInMinute;
**注意:**以上配置的JWT有效时长是以分钟为单位,读取到值后,应该自行运算,得到以毫秒为单位的时间,以匹配Date类的使用:
关于复杂请求的跨域问题
当客户端向服务器端提交请求时,如果在请求头中定义了特殊属性(例如Authorization属性),则此请求就会被视为“复杂请求”,对于复杂请求,各浏览器默认情况下需要执行“预检(PreFlight)”。
预检时,会向目标URL提交OPTIONS方式的请求,如果此请求被允许,则可以正常提交原定的请求,如果此请求被拒绝,则出错!
在基于Spring Security框架的服务器端应用程序中,要解决复杂请求的跨域访问问题,可选的解决方案有:
-
在Spring Security的配置类的
configurer(HttpSecurity http)方法中添加以下代码:http.cors();当添加以上配置后,会注册Spring Security自带的
CorsFilter,此过滤器会放行OPTIONS类型的请求 -
在Spring Security的配置类的
configurer(HttpSecurity http)方法中配置授权访问时,将所有OPTIONS类型的请求全部放行,例如:
提示:浏览器对复杂请求的预检是支持缓存的,也就是说,如果对某个URL提交的是复杂请求,当第1次请求通过后,后续的请求不再执行预检。
添加管理员时确定角色
添加管理员时,必须为新管理员分配至少1种角色,否则,新添加的管理员将无法对应任何权限,在后台管理项目中,添加这样的管理员是没有意义的!
要实现添加管理员时分配角色,在服务器端需要:
- 在Mapper层实现查询角色列表
- 在Service层实现查询角色列表
- 在Controller层实现查询角色列表
- 在原有的新增管理员的DTO中添加新的属性,表示若干个角色(
Long[] roleIds) - 在新增管理员的业务中,补充向“管理员与角色的关联表”中插入数据