相关疑难解决方法(0)

春季安全3中@ secure和@PreAuthorize的区别是什么?

我不清楚弹簧安全性的区别在于:

 @PreAuthorize("hasRole('ROLE_USER')")
 public void create(Contact contact)
Run Code Online (Sandbox Code Playgroud)

@Secured("ROLE_USER")
public void create(Contact contact)
Run Code Online (Sandbox Code Playgroud)

我知道PreAuthorize可以与spring el合作,但在我的样本中,是否有真正的区别?

spring-security

136
推荐指数
5
解决办法
5万
查看次数

注入修改后的Spring安全表达式语言实现后,"需要调试符号信息(...)"

我有一个示例类来测试@PreAuthorize注释,它看起来或多或少像这样:

class BankService {

    @PreAuthorize("hasCustomRole('ROLE_CUSTOM') or hasRole('ROLE_EXAMPLE')")
    Double getAccountBalance(Integer accountNumber) {
        return 1234;
    }

    @PreAuthorize("#accountNumber > 400")
    int getValue(Integer accountNumber) {
        return 1234;
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以hasCustomRole(String expression)@PreAuthorize注释中注意到,我正在添加:

public class CustomSecurityExpressionRoot extends SecurityExpressionRoot {

    public CustomSecurityExpressionRoot(Authentication auth) {
        super(auth);
    }

    public boolean hasCustomRole(String expression) {
       return /* some magic */;
    }
}
Run Code Online (Sandbox Code Playgroud)

另外,我正在DefaultMethodSecurityExpressionHandler以下列方式进行扩展:

public class CustomMethodSecurityExpressionHandler extends DefaultMethodSecurityExpressionHandler {

    public CustomMethodSecurityExpressionHandler() {
        super();
    }

    @Override
    public EvaluationContext createEvaluationContext(Authentication auth, MethodInvocation mi) {
        StandardEvaluationContext …
Run Code Online (Sandbox Code Playgroud)

grails spring spring-security

5
推荐指数
1
解决办法
753
查看次数

标签 统计

spring-security ×2

grails ×1

spring ×1