目录 start
目录 end
|2018-05-26| 码云 | CSDN | OSChina
compile('org.springframework.boot:spring-boot-starter-security')
public interface ReaderRepository extends JpaRepository<Reader, String> {}
使用多个实体类(实现了UserDetails接口),一个权限类,再一个多对多连接,就得到了多用户,多权限的控制
根据书上案例代码,可以得出结论,用户表,角色表,用户角色关联表,用户表是可以多张的,角色公用一张即可,然后关联表也对应的多张,就能实现具体的业务需求
Author
Admin
Reader
三个类继承了UserDetails接口的实体类的配置
代码片段
spirng.jpa.hibernate.ddl-auto=update
特殊字符
把类型放进去,然后正则取出来
- 思考:
- 其实这个安全框架使用的是角色控制,而不是权限控制,目前的了解,达不到Oracle那样的权限加角色的精细化控制
集成JWT到Spring Boot项目 | 使用JWT保护你的Spring Boot应用 重拾后端之Spring Boot(四):使用JWT和Spring Security保护REST API 开箱即用 - jwt 无状态分布式授权
跨域(CORS) 解决方案中,为什么 Access-Control-Allow-Methods 不起作用? WEB应用前后端分离实践 关键词:rest架构+跨域访问+JWT校验
需要先配置这个配置类,后面的注解才会生效
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration{}
@PreAuthorize
方法调用前,基于表达式的计算结果来限制方法的访问
@PostAuthorize
允许方法调用,如果表达式是false 抛出安全异常
@PostFilter
允许方法调用,按照表达式来过滤方法的结果
@PreFilter
允许方法调用,必须进入方法前过滤输入值
方法调用前验证权限,示例:
@PreAuthorize("hasRole('ROLE_ADMIN')")
只允许该权限的用户访问@PreAuthorize("(hasRole('ROLE_READER') and #user.text.length()<=140 ) or hasRole('ROLE_AUTHOR')")
方法调用之后验证权限,示例;
@PostAuthorize("returnObject.spitter.username == principal.username")
以上是保护方法的调用,但是有时候保护的是数据的输入输出:
过滤方法的输入输出
@PreAuthorize("hasAnyRole({'ROLE_ADMIN','ROLE_USER'})")
@PostFilter("hasRole('ROLE_ADMIN') || filterObject.user.username == principal.name")
public List<User> getUsers(){}
@PreAuthorize("hasAnyRole({'ROLE_ADMIN','ROLE_USER'})")
@PreFilter("hasRole('ROLE_ADMIN') || targetObject.user.username == principal.name")
public void deleteUsers(){List<User> users}
@PreFilter("hasPermission(targetObject,'delete')")
用户是否有权限删除目标对象?DefaultMethodSecurityExperssionHandler ex = new De...();
ex.setPermissionEvaluator(new 自定义类);
return ex;
SpringForAll社区:Spring Security源码分析(三):Spring Social实现QQ社交登录
SpringForAll社区:Spring Security 源码分析(四):Spring Social实现微信社交登录