SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理(上)----筑基中期 (2)

在编写shiro配置类这一步,需要大家注意的是,因为我们使用的是md5+salt+hash加密我们的密码,因此要换掉默认的凭证匹配器CredentialsMatcher对象,对于这部分的内容请参考我的另一篇文章《shiro入门学习--使用MD5和salt进行加密|练气后期》 。

实现认证模块 VO层 /**认证请求参数 * @author 赖柄沣 bingfengdev@aliyun.com * @version 1.0 * @date 2020/10/7 15:12 */ @Data public class LoginVO implements Serializable { private String username; private String password; } web层 /**认证模块 * @author 赖柄沣 bingfengdev@aliyun.com * @version 1.0 * @date 2020/10/6 10:07 */ @RestController @RequestMapping("/authc") public class AuthcController { @Autowired private AuthcService authcService; @PostMapping("/login") public boolean login(@RequestBody LoginVO loginVO){ return authcService.login(loginVO); } @GetMapping("/unauthc") public String unauthc(){ return "请先登录"; } } service层 /** * @author 赖柄沣 bingfengdev@aliyun.com * @version 1.0 * @date 2020/10/7 15:15 */ @Service public class AuthcServiceImpl implements AuthcService { @Override public boolean login(LoginVO loginVO) throws AuthenticationException { if (loginVO==null){ return false; } if (loginVO.getUsername()==null||"".equals(loginVO.getUsername())){ return false; } if (loginVO.getPassword() == null || "".equals(loginVO.getPassword())){ return false; } Subject subject = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken(loginVO.getUsername(), loginVO.getPassword()); subject.login(token); return true; } } 实现产品模块 /**产品模块 * @author 赖柄沣 bingfengdev@aliyun.com * @version 1.0 * @date 2020/10/6 10:14 */ @RestController @RequestMapping("/product") public class ProductController { @RequiresPermissions("product:get") @GetMapping("/get/list") public String getProductList() { return "productList"; } @RequiresPermissions("product:delete") @GetMapping("/delete") public String deleteProduct() { return "删除产品数据"; } }

对于注解实现访问控制,shiro主要有两个注解:RequiresPermissions和RequiresRoles。均可以用在类和方法上。具体用在哪可以根据自己的系统权限划分粒度决定。

对于这两个注解,有两个参数:

value :分别对应permission的权限字符串值和role的角色名称;

logical:逻辑运算符。这是一个枚举类型,有AND和OR两个值。当使用AND时表示需要满足所有传入的value值,OR表示仅需满足一个value 即可。默认为AND

关于shiro权限(访问控制)的更多内容,可以阅读我的另一篇文章《shiro入门学习--授权(Authorization)|筑基初期》

简单测试 认证通过的情况

SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理(上)----筑基中期

认证未通过的情况

SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理(上)----筑基中期

获取产品信息

SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理(上)----筑基中期

请求没有访问权限的资源

SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理(上)----筑基中期

默认的消息提示可以换一下。

未经过认证直接访问受保护资源

SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理(上)----筑基中期

写在最后

在这一篇文章当中,我们搭建了一个初步的SpringBoot整合Shiro的应用,实现了认证和授权。

在下一篇文章当中,我们将接着完善这个小demo。加入自定义shiro会话管理和shiro缓存的内容。并且会将这个小demo进行升级,使其变成前后端分离的模式。

双节即将结束,代码人在江湖!

如果您觉得这篇文章能给您带来帮助,那么可以点赞鼓励一下。如有错误之处,还请不吝赐教。在此,谢过各位乡亲父老!

代码及sql下载方式:微信搜索【Java开发实践】,加关注并回复20201007 即可获取下载链接。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgjgj.html