赞
踩
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为轻量级,主要就是一个验证器
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的依赖后面加入
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:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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()
在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>
日志就使用内置的Slf4j,就不引入log4j
这里就直接放在一个表中,本来应该分表
@Data
@Accessors(chain = true)
public class ShiroUser {
//token认证信息
private String userName;
private String userPwd;
//用户角色
private List<String> userRoles;
//用户权限资源
private List<String> userPermissions;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。