我们在controller层写的http接口伴随一些隐性的需求,比如:是否登录、是否有权访问、获得当前访问者信息、单点登录等功能
本项目已在2020-02-27日发布至maven中央仓库,并且增加了新的功能
maven坐标为 其他方式集成:
<dependency>
<groupId>com.github.liuchengts</groupId>
<artifactId>spring-boot-auth-starter</artifactId>
<version>1.0.0</version>
</dependency>
一、加密方式
使用 aes 256 加密 再使用 16进制 转换得到加密后的 token
二、token生成规则说明
group:用于将权限写入到一个组中,在这个组里面权限是唯一的,如果不需要可以传空字符串或者将userNo值传入
userNo:用于标记当前权限所属的用户
roles:表示的权限角色,应当自己写一个RolesConstant
的接口声明,默认是 com.boot.auth.starter.common.DefaultRolesConstant
parameters:除了userNo和roles之外,还需要放入缓存中的信息,后面会在 Session
中获得
综合以上参数按顺序 userNo+group+时间戳+项目域名
加密生成一个字符串
三、缓存信息存取
1、token:往当前response中会分别写入 Cookie与Header; 取数据的key值是x-token
2、parameters:当中信息存入redis;取数据的key值是配置的 tokenPrefix + userNo + ,+ group
四、业务接口的使用 com.boot.auth.starter.service.AuthService
1、auth方法,用于授权产生 token,一般在登录时使用
@Autowired
AuthService authService;
@GetMapping("/")
public String login(HttpServletResponse response,
HttpServletRequest request) throws Exception {
log.info("访问到了 login");
Map<String, Object> parameters = new HashMap<>();
parameters.put(AuthConstant.SESSION_NICK_NAME, "我是用户昵称");
String group = "";
String userNo = "";
String roles = RolesConstant.USER_1 + "," + RolesConstant.DEFAULT;
return authService.auth(group, userNo, roles, parameters, response, request);
}
2、checkToken方法,用于检测当前token是否有效
3、analysisToken方法,用于token的解析,会将token中加密的内容解密出来以map的形式返回,其中map的key 请参见 com.boot.auth.starter.common.AuthConstant
中 token解析 MAP_KEY_*
部分。
4、deleteAuth方法,用于删除当前的token,一般用于退出登录或者清理token。
五、注解的使用
1、@Auth
是最基本的注解,该注解可以在类或者方法上,表示需要使用权限验证模块,如果没有此注解则不会启用本模块的权限功能,如果只使用@Auth
而不增加 roles
属性,则会应用默认的权限验证DefaultRolesConstant.DEFAULT
;直接的体现就是进行登录验证后马上进行权限验证,通过后即可访问资源。
@Auth
@GetMapping("/auth1")
public Session testAuth1(Session session) {
log.info("访问到了 auth1");
return session;
}
2、@IgnoreLogin
是不需要登录的注解,该注解可以在类或者方法上,即在有@Auth
的情况下可以忽略@Auth
的登录验证及权限设置,没有任何阻拦直接访问对应资源;直接的体现就是仿佛没有启用本模块的功能。
@IgnoreLogin
@GetMapping("/auth3")
public Session testAuth3(Session session) {
//由于不校验登录,所以session为空
log.info("访问到了 auth3");
return session;
}
3、@NoAuthGetSession
是不需要校验权限的注解,该注解可以在类或者方法上,即在有@Auth
的情况下只会进行登录验证,忽略@Auth
的权限设置,访问对应资源;直接的体现就是在方法上session
会自动注入当前登录者的信息
@NoAuthGetSession
@GetMapping("/auth2")
public Session testAuth2(Session session) {
log.info("访问到了 auth2");
return session;
}