基于springboot的shiro安全框架实例

基于springboot的shiro安全框架实例

shiro简介

Shiro是一个功能强大且易于使用的Java安全框架,它执行身份验证、授权、加密和会话管理。使用Shiro易于理解的API,您可以快速轻松地保护任何应用程序—从最小的移动应用程序到最大的web和企业应用程序,这里简单介绍几个核心功能:
ⅰ. 身份认证 验证用户是否为合法用户
ⅱ. 权限认证 验证某个用户是否有权限访问某个资源
ⅲ. 会话管理 管理特定用户的会话
ⅳ. 加解密 使用加密算法确保数据安全,同时仍然易于使用。

shiro的认证概念

我们先理解三个概念:
1.Subject
访问系统的用户,主体可以是用户、程序等,进行认证的都称为主体
2.Principal
身份信息,是主体(subject)进行身份认证的标识,标识必须具有唯一性,如用户名、手机号、邮箱地址等,一个主体可以有多个身份,但是必须有一个主身份(Primary Principal)
3.credential
凭证信息,是只有主体自己知道的安全信息,如密码、证书等

shiro的工作流程

shiro的认证流程

shiro的认证逻辑

	1.shiro会在过滤器的基础上引入自己的shirofilter
	2.通过shirofilter代理自己的一系列过滤器链
	3.用户通过shiro的认证过过滤器链之后会继续进行基础的过滤器链

基于shiro的登陆实现

1.建立一个springboot项目
2.导入shiro相关依赖
3.加入shiro的配置
4.登陆操作的简单实现

一.建立一个springboot项目
搭建项目时,注意引入web,数据库连接以及mybatisplus相关工具
二.导入shiro相关依赖
在pom里导入依赖shiro-spring-boot-web-starter,版本自选即可
三.加入shiro的配置
1.在自定义类加入shiro的拦截器链条

2.在配置文件application.yml中自定义身份认证受限时的跳转页面

3.自定义身份认证和权限认证。
	自定义shiroRealm类继承AuthorizingRealm,从而实现两个方法,都是通过对比数据库信息与用户输入信息从而得到结果。
	(1)身份认证doGetAuthenticationInfo
		 protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
    User user = (User) principals.getPrimaryPrincipal();
    System.out.println(user);
    //查找该用户所有的角色
    List<Role> roleList = roleMapper.selectListByuserid(user.getUserId());
    System.out.println(roleList);
    Set<String> strRoles = roleList.stream()
            .map(r -> r.getRoleName())
            .collect(Collectors.toSet());
    List<String> permissions = new ArrayList<>();
    if(roleList.size()>0) {
        //查找该用户所有的权限
        permissions =  permMapper.selectPermInRoleIds(roleList);

    }
    SimpleAuthorizationInfo authzInfo = new SimpleAuthorizationInfo();
    authzInfo.setStringPermissions(new HashSet<>(permissions));
    authzInfo.setRoles(strRoles);
    return authzInfo;
}


	(2)权限认证doGetAuthorizationInfo
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
    Object username = authenticationToken.getPrincipal();
    QueryWrapper<User> qw=new QueryWrapper<>();
    qw.eq("username",username);
    User user = userMapper.selectOne(qw);

    return new SimpleAuthenticationInfo(user,user.getPassword(),getClass().getName());
}

四.登陆操作的简单实现效果
1.在controller层的测试类中,创建三个方法。
(1)登陆,任何用户可以进入
(2)学习,合法用户可以进入
(3)上课,用户老师权限可以进入
public class LoginController {

@PostMapping("/login")
public String login(String username,String password){

    Subject subject = SecurityUtils.getSubject();
    subject.login(new UsernamePasswordToken(username,password));

    return "success";
}

@GetMapping("/study")
public String pay(){
    return "success";
}

@GetMapping("/teach")
@RequiresPermissions("teach")
public String create(){
    return "success";
}

}
2.在浏览器通过身份测试和权限测试
身份测试效果,学习页面需合法用户
1.未登陆时,跳转学习页面后会自动跳转回登录页面
2.登陆后,可以成功跳转学习页面
权限测试效果,上课页面需老师权限
1.学生用户登陆,进入上课页面受限
2.老师用户登陆,成功进入上课页面

shiro的数据库设计

RBAC:role based access control
1 基于角色的访问控制
2授权基于角色实现
3核心实体类
role 角色
permission 权限
user 用户
4数据库关系
user <----(user-role)—> role <----(role-permission)—> permission

总结

1.本文旨在帮助初学者学习,欢迎大家合理探讨。
2.本例只是shiro的一个简单实现,有诸多不足之处,希望大家理解。
3.更多的关于shiro的知识,大家可以在shiro官方文档查看,以下是链接
https://shiro.apache.org/


- 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vue, SpringbootShiro可以进行整合,实现前后端的权限管理和验证。在这个整合过程中,可以使用Vue作为前端框架Springboot作为后端框架Shiro作为权限管理和验证的工具。通过整合,可以实现用户身份认证、角色授权、权限控制等功能。具体的整合方式可以参考引用和引用中提到的相关文章和项目实例。在整合过程中,可以使用Ztree等工具来实现后台权限管理的功能。整合后的系统可以采用B/S结构,前端使用Vue.js进行开发,后端使用Springboot框架进行开发,实现前后端分离的架构。总的来说,整合Vue, SpringbootShiro可以实现一个功能完善的权限管理系统。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [springboot整合shiro](https://download.csdn.net/download/qq_39697789/10318106)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [springboot-vue-shiro-权限整合](https://download.csdn.net/download/qq_41497111/10899721)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [基于java+springboot+vue开发的短视频播放系统](https://download.csdn.net/download/wchg21131/88224746)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值