java - 使用 Spring Security 保护方法

标签 java spring jsf spring-security

对于我们当前的项目,我们正在集成 JSF 和 Spring 框架。我想使用 Spring Security 来处理身份验证和授权。到目前为止,我已经实现了一个自定义的 PasswordEncoderAccessDecisionVoter ,它们运行良好。现在,我尝试使用 @Secured 注释(以及其他注释)来保护方法,但我无法使其按照我期望的方式工作。

似乎 @Secured 注释仅适用于直接从 JSF 层调用的 bean 方法。这是一个简化的示例:

@Named("foobarBean")
@Scope("access")
public class FoobarBean
{
    @Secured("PERMISSION_TWO")
    public void dummy()
    {
    }

    @Secured("PERMISSION_ONE")
    public String save()
    {
        dummy();
    }
}

save() 方法是从 JSF 层调用的,如下所示:

<h:commandButton id="save" action="#{foobarBean.save}" />

然后,我们的 AccessDecisionVoter 会被要求对 PERMISSION_ONE 进行投票,但对 PERMISSION_TWO 进行投票。这是按设计工作的吗(我希望不是)还是我做错了什么(那可能是什么?)。

我会发布更多代码或配置,但我不确定哪一部分是相关的,而且我不想让这篇文章变得困惑。

最佳答案

这是一个简单的Proxy AOP问题!如果您使用代理 AOP 来确保安全,那么代理只能拦截通过代理的调用。如果一个方法直接调用同一 bean 的另一个方法,则没有代理可以拦截此调用。 -- 这就是为什么只考虑 save() 的安全注解的原因。

一种解决方案是使用 AspectJ AOP 而不是代理 AOP。 (Spring(安全)也支持它。)

关于java - 使用 Spring Security 保护方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6979788/

相关文章:

java - spring boot如何从自定义yml加载属性

java - 有没有类似<c :url> for JSF?

jsf - 有条件地渲染 <ui :include>

Java:Collections.unmodifiedMap 与 Collections.checkedMap

java - Docx4J Bad [Content_Types].xml 与 WebLogic 12c

java - Spring:使用构建器模式创建 bean

java - 从 ManagedResource bean 公开 Collection<Something>?

java - 在 HttpSessionListener 中如何获取 HttpServletRequest?

java - testng.xml 编译未包含在其中的类

java - 如何解释这个关于日历的java代码