目录 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实现微信社交登录