当前位置:   article > 正文

【开发技术】2万字分析shiro、spring security两大安全框架,spring session,OAuth2 入门级教程_springsession和springsecurity

springsession和springsecurity

SpringBoot

内容管理


SpringBoot开发技术 — 应用程序安全,Spring security,Shiro


加快进度…数据库持久化一般就是选用Mybatis、Mybatis-plus或者使用JPA,使用JPA也可以@Query书写SQL,使用redis的时候如果使用Jedis客户端,必须要排除Lettuce,同时要进行配置,可以在yaml中配置,可以通过@Value和@ConfigurationProperties将配置项注入给属性或者对象,redisTemplate可以进一步封装,方便进行缓存,一般全局的缓存使用@EnableCaching和@Cacheable来开启缓存和使用缓存,这样方法就不会真正执行,减少执行时间,还可以将高频访问数据缓存起来;使用MongoDB的时候可以使用Template或着repositroy的方式,实体要加上@Document才会由MongoDB维护; MongoDB注重的是海量,可以压缩,可以@Indexed加上索引,Redis注重的是高性能,一般用作Cache

Shiro和Spring security使用都挺普遍的,Shiro非常easy,就realm加上一些鉴权即可; spring security在配合spring boot后使用也逐渐宽泛,本文的代码分为两个Demo演示

Web开发中还有一个要点就是应用程序的安全性,比如一般通过登录验证保护用户的个人资源,会员制度将会员和普通用户享用的功能区分,管理系统要进行角色进行相关的权限的管理,安全管理框架: Spring Security和Shiro,Shiro为轻量级,主要就是一个验证器

  • 认证authentication : 确定用户身份; 包括用户名密码,或者指纹,就是token
  • 授权 authorization : 对用户访问系统资源的行为进行控制,确定权限

RBAC role based access control 访问控制基于角色,安全管理的实现思路就是前台通过相关的标签进行标记,后台通过拦截器将资源拦截,用户关联的是角色role,role关联的是权限和资源,通过资源和权限关联最终的效果

本文创建demo为cfeng-security-demo,发布在Gitee仓库

spring init -d web,mustache,jpa,mysql,devtools,security --build maven -p war cfeng-security-demo //后期的其他的比如Shiro的依赖后面加入

Shiro

Apache Shiro是Java的安全权限框架,Shiro可以完成认证,授权,加密,会话管理和Web继承,缓存

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RA1iUhSf-1658691438692)(https://tse4-mm.cn.bing.net/th/id/OIP-C.uiYdh3VC6KEbbMKQIsQ-9AHaEN?pid=ImgDet&rs=1)]

Shiro的架构: 从外部应用程序角度来观察Shiro:

  • Subject: 当前访问的主体,应用程序主要和subject关联
  • Shiro SecurityManager: Shiro核心管理器,管理所有的Subject
  • Realm: 获取管理的资源data

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MiKUgA41-1658691438694)(https://ts1.cn.mm.bing.net/th/id/R-C.c1e6aee336420cc5d699baecdd2d975d?rik=P4aNIrH3F5cfdQ&riu=http%3a%2f%2fwww.uml.org.cn%2fsafe%2fimages%2f2020012031.png&ehk=VGH8nb1P1BoYQCwYZSWlxuU9veYVOfuGY129fMf8Neo%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1)]

Shiro的架构: 从内部查看,就是Security Manager内部的构成,是使用到了CacheManager的

查看源图像

主要就是一个Authenticator,Authorizer相关的认证器,授权器,使用比较easy

Subject currectUser = SecurityUtils.getSubject();//获得当前用户
Session session = currentUser.getSession(); //获取当前用户的session
//认证
currentUser.login(token);  //登录后抛出的各种异常判断登录结果
//授权
currentUser.hasRole
currentUser.isPermitted
currentUser.isAuthenticated [是否认证]

currentUser.logout()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在Spring boot中使用shiro需要引入相关的起步依赖,也就是shiro-spring-boot-starter

<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring-boot-web-starter</artifactId>
    <version>1.6.0</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

日志就使用内置的Slf4j,就不引入log4j

创建demo 用户【用户包括token ,角色,权限】

这里就直接放在一个表中,本来应该分表

@Data
@Accessors(chain = true)
public class ShiroUser {
    //token认证信息
    private String userName;

    private String userPwd;

    //用户角色
    private List<String> userRoles;
    //用户权限资源
    private List<String> userPermissions;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/133799

推荐阅读
相关标签