我使用的是Spring Security @PreAuthorize注释,它在我使用文档中或在文档中看到的“已知好的”表达式时有效其他在线示例。示例代码不是真正的用例,它是人为设计的。如何在Spring注释表达式中读取会话变量,特别是@PreAuthorize
以下表达式是对与其下面的示例方法格式相似的方法或方法进行工作的所有变体。这些表达式不是在同一时间使用,或者为了简单起见,它们只是一起显示在这里。
@PreAuthorize("hasRole('ROLE_ADMIN')")
@PreAuthorize("hasAuthority('PERM_XYZ') or authentication.principal.id == #ownerId")
@PreAuthorize("hasRole('ROLE_USER') and #someValue == 'testValue'")
public List<Item> getSomeItems(Integer ownerId, String someValue) {
// code goes here
}
我想什么能够做的就是在这样的表达测试对会话变量的方法论证:
@PreAuthorize("hasAuthority('PERM_XYZ') or #someValue == session.someOtherValue")
public List<Item> getSomeItems(Integer someValue) {
// code goes here
}
我本来以为在表达式访问会话会是一项基本任务,但我还没有在网上找到一个例子,甚至没有人问到如何去做。
我已经尝试了所有的以下还有更多,但他们都产生异常:
@PreAuthorize("#someValue == #session.someValue")
@PreAuthorize("#someValue == session.someValue")
@PreAuthorize("#someValue == session.getAttribute('someValue')")
@PreAuthorize("#someValue == request.session.someValue")
@PreAuthorize("#someValue == request.session.getAttribute('someValue')")
上述一切有关春季安全和@PreAuthorize注解,但是那些东西真的不是中央质疑。
我知道访问会话的许多选择,并已解决我的用例,但我仍然想知道是否有可能通过任何注释中的表达式访问会话。
那么......用户会话可以在Spring注解表达式中访问吗?如果是这样的话?谢谢。
如果你正在使用Spring Security的,为什么你要检查一个会话变量,而不是当前登录的用户。 –
我有一种强烈的感觉,即“你为什么要这样做”,情绪几乎立即就会弹出。原始示例代码中的“userId”不是一个真正的用例,因此它已被替换为显示表达式的更通用的示例。我主要想知道是否有一种简单的方法通过注释表达式来访问会话对象或请求对象。这最终是一个好奇心的问题,因为我做不了我认为容易的事情。 –
然后,您可能想要使用不依赖或解析身份验证的示例。该请求应该可用,所以我期望'request.session.getAttribute('someValue')'实际工作。他们是否都会产生相同的异常或不同的异常? –