Day13-配置文件

100 阅读3分钟

关于使用配置文件(续)

需要注意:所有自定义配置推荐使用公司名称、项目名称等不容易冲突的名称作为自定义配置的属性名前缀,并且,属性名不必太过于简短,更重要的是不能冲突,且清晰的表达意思!

关于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类的使用:

image.png

关于复杂请求的跨域问题

当客户端向服务器端提交请求时,如果在请求头中定义了特殊属性(例如Authorization属性),则此请求就会被视为“复杂请求”,对于复杂请求,各浏览器默认情况下需要执行“预检(PreFlight)”。

预检时,会向目标URL提交OPTIONS方式的请求,如果此请求被允许,则可以正常提交原定的请求,如果此请求被拒绝,则出错!

在基于Spring Security框架的服务器端应用程序中,要解决复杂请求的跨域访问问题,可选的解决方案有:

  • 在Spring Security的配置类的configurer(HttpSecurity http)方法中添加以下代码:

    http.cors();
    

    当添加以上配置后,会注册Spring Security自带的CorsFilter,此过滤器会放行OPTIONS类型的请求

  • 在Spring Security的配置类的configurer(HttpSecurity http)方法中配置授权访问时,将所有OPTIONS类型的请求全部放行,例如:

image.png

提示:浏览器对复杂请求的预检是支持缓存的,也就是说,如果对某个URL提交的是复杂请求,当第1次请求通过后,后续的请求不再执行预检。

添加管理员时确定角色

添加管理员时,必须为新管理员分配至少1种角色,否则,新添加的管理员将无法对应任何权限,在后台管理项目中,添加这样的管理员是没有意义的!

要实现添加管理员时分配角色,在服务器端需要:

  • 在Mapper层实现查询角色列表
  • 在Service层实现查询角色列表
  • 在Controller层实现查询角色列表
  • 在原有的新增管理员的DTO中添加新的属性,表示若干个角色(Long[] roleIds
  • 在新增管理员的业务中,补充向“管理员与角色的关联表”中插入数据