通过ownerId java spring security过滤行数据库[关闭]
Posted
技术标签:
【中文标题】通过ownerId java spring security过滤行数据库[关闭]【英文标题】:filter rows database by ownerId java spring security [closed] 【发布时间】:2017-08-10 16:21:45 【问题描述】:我想按 ownerId 过滤我的帐户记录,如果有人试图访问他不是所有者的记录,则显示访问被拒绝。
在 java spring security 中是否可以做到这一点?
如果是,我们能否将其应用于一组用户,其中每个组只能看到共享记录?
【问题讨论】:
【参考方案1】:您可以使用 Spring Security 的 Filter 注释来实现这一点。为您提供 PreFilter 和 PostFilter。您可以通过注解您的安全配置文件来启用前置和后置注解。
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter
// your web security stuff.
因为你想通过一个属性过滤掉你会使用 PostFilter
@PostFilter("filterObject.ownerId == authentication.name")
public List<Record> findAllRecords()
// perform query to get records.
Spring 将获取所有记录,然后继续过滤掉所有 ownerId 与经过身份验证的用户不匹配的记录。
您还可以应用其他 spring 表达式(hasRole、hasAuthority、isAuthenticated 等)以及组合表达式。例如,如果您希望仅具有 ROLE_ADMIN 的用户访问所有记录,并且如果用户没有 ROLE_ADMIN 以通过 ownerId 过滤掉,您可以执行以下操作。 (您可以在表达式中使用“and”或“or”运算符)
@PostFilter("hasRole('ROLE_ADMIN') or filterObject.ownerId == authentication.name")
public List<Record> finAllRecords()
// perform query to get all records.
春季文档:http://docs.spring.io/spring-security/site/docs/current/reference/html/el-access.html#filtering-using-prefilter-and-postfilter
在 baeldung.com 上很好地记录了这些功能 http://www.baeldung.com/spring-security-prefilter-postfilter
【讨论】:
我使用的是可分页的,看来@postFilter 它只适用于集合以上是关于通过ownerId java spring security过滤行数据库[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
通过 Angular 5 和 Spring Sec 5 中的 HTTP GET 请求对用户进行身份验证
sec:authorize 对 Spring Security 不起作用
sec:authorize 不起作用 - Spring Boot 2、Thymeleaf 3、Thymeleaf Spring Security 5 集成包
[spring] java.lang.reflect.MalformedParameterizedTypeException