首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring安全性-决定是否需要登录或允许匿名访问的复杂逻辑

Spring安全性-决定是否需要登录或允许匿名访问的复杂逻辑
EN

Stack Overflow用户
提问于 2014-12-07 08:01:27
回答 1查看 76关注 0票数 0

使用securiity,我面临着一个复杂的商业决策需求,即是允许匿名访问还是坚持用户登录。逻辑太复杂,不适合“截获-url”表达式(截获-url模式=‘/mypattern/**’)

代码语言:javascript
复制
E.g. assume a RESTFul books service:
https://myserver/rest/book?title=war_and_peace
https://myserver/rest/book?title=the_firm

Say "war and peace" allows anonymous access because its old and its copyrights have expired.
While "the firm" is copyrighted & requires login (so as to charge the user).
This copyright info is available in a database.

有谁能对如何在春天的安全中实现这一点提供任何提示吗?提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-07 22:15:12

当然,代码看起来有多种方式,但是要想得到这样的想法:

代码语言:javascript
复制
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth instanceof AnonymousAuthenticationToken && "the_firm".equals(title)) {
    throw new AccessDeniedException("Requires login!");
}

更新:更多的声明性方法是使用注释:

代码语言:javascript
复制
@PostAuthorize("hasPermission(returnObject, 'READ')")
public Book findBook(String title) {
    // ...
}

这要求您创建一个权限评估器 bean并添加配置:

代码语言:javascript
复制
<global-method-security pre-post-annotations="enabled">
  <expression-handler ref="expressionHandler" />
</global-method-security>
代码语言:javascript
复制
@Bean
public DefaultMethodSecurityExpressionHandler expressionHandler() {
    DefaultMethodSecurityExpressionHandler handler = new DefaultMethodSecurityExpressionHandler();
    handler.setPermissionEvaluator(permissionEvaluator);
    return handler;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27340827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档