(1)pom添加依赖

     <dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.1.3.RELEASE</version>
</dependency>

(2)添加相应配置类

 package cn.coreqi.config;

 import org.springframework.context.annotation.Configuration;
import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler;
import org.springframework.security.access.expression.method.MethodSecurityExpressionHandler;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration; @Configuration
@EnableGlobalMethodSecurity(securedEnabled = true,jsr250Enabled = true,prePostEnabled = true) //启用基于注解的方法安全性
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
/**
* 注册自定义的表达式处理器
* @return
*/
// @Override
// protected MethodSecurityExpressionHandler createExpressionHandler() {
// DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
// expressionHandler.setPermissionEvaluator(new UserPermissionEvaluator());
// return expressionHandler;
// }
}

(3)dao使用相应的注解

仅仅作为参考

 package cn.coreqi.dao.redis;

 import cn.coreqi.entities.User;
import org.springframework.security.access.annotation.Secured;
import org.springframework.security.access.prepost.PostAuthorize;
import org.springframework.security.access.prepost.PostFilter;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.access.prepost.PreFilter;
import org.springframework.stereotype.Repository; import java.util.List; @Repository
public class UserRedis { @Secured("ROLE_ADMIN") //限制只有ROLE_ADMIN权限才可以调用此方法
public List<User> getAll(){
return null;
} @PostAuthorize("returnObject.UserName == principal.username") //方法返回时执行,根据表达式结果决定是否抛出安全性异常
public User getById(int Id){
return null;
} @PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_SYSTEM') and #user.UserName.length() <= 16") //在方法调用前执行,如果表达式不为true则阻止方法执行
public User modify(User user){
return null;
} public void delById(int Id){
} @PostFilter("hasRole('ROLE_ADMIN') && filterObject.Age < 18") //使用表达式计算该方法返回中的每一个成员,将计算结果为false的成员移除掉。
public List<User> findMeinv()
{
return null;
} @PreFilter("hasRole('ROLE_ADMIN') && targetObject.Name == 'admin'") //在方法调用前对参数中的每一个元素进行过滤,只有满足表达式的元素才会保留到集合中
public void batchAdd(List<User> users){ }
}

(4)*(不重要)自定义表达式处理器,如何注册参考(2)

 package cn.coreqi.config;

 import org.springframework.security.access.PermissionEvaluator;
import org.springframework.security.core.Authentication; import java.io.Serializable; /**
* 自定义表达式处理器
*/
public class UserPermissionEvaluator implements PermissionEvaluator {
@Override
public boolean hasPermission(Authentication authentication, Object o, Object o1) {
return false;
} @Override
public boolean hasPermission(Authentication authentication, Serializable serializable, String s, Object o) {
return false;
}
}

最新文章

  1. Solr实现Low Level查询解析(QParser)
  2. java表格的使用 单元格绘制二
  3. extractor
  4. Kinect学习笔记(五)&mdash;&mdash;更专业的深度图
  5. js调用百度地图API创建地图
  6. 从 mian 函数开始一步一步分析 nginx 执行流程(一)
  7. Uber司机手机终端问答篇
  8. MySQL自动化(全量+增量)备份脚本
  9. .net控件Radiobuttonlist的简单应用
  10. 通过案例理解position:relative和position:absolute
  11. 尚学堂马士兵struts2 课堂笔记(二)
  12. Logistic Regression求解classification问题
  13. compare.go
  14. You must configure either the server or JDBC driver (via the serverTimezone configuration property
  15. Ingenious Lottery Tickets 【排序】
  16. Ros使用Arduino 3用rosserial创建一个subscriber
  17. 【转】keil5 missing close quote 错误解决
  18. NodeJS API Process全局对象
  19. WordPress基础:在浏览站点时顶部显示工具栏显示隐藏
  20. 开启Remote Desktop的PowerShell

热门文章

  1. day14 装饰器
  2. MT【240】6*6放黑白子
  3. SPI、I2C、UART三种串行总线协议的区别
  4. ZABBIX 3.4 监控服务器TCP连接状态(六)
  5. Pentaho data integration(kettle) 在Mac上启动不了
  6. 2018.7中石油个人赛第4场(D-Transit Tree Path)-最短路算法
  7. Optional与Mybatis能否一起
  8. SQL Server sp_executesql介绍和使用
  9. mysql盲注学习-1
  10. 20190408 XStream解析List