springboot-web层的权限校验

我们在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;
    }

欢迎关注我的个人公众号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值