Spring Web Flow 2.4.1和Spring Security 4.0.1

时间:2015-05-07 21:26:30

标签: spring-security spring-webflow

我们在项目中使用了Spring Web Flow 2.4.1和Spring Security 3.x(最高3.2.6)。但是,在我们升级到Spring Security 4.0.1之后,我们遇到了以下异常。有什么帮助吗?

java.lang.NoSuchMethodError: org.springframework.security.access.vote.AffirmativeBased: method <init>()V not found
at org.springframework.webflow.security.SecurityFlowExecutionListener.decide(SecurityFlowExecutionListener.java:102)

1 个答案:

答案 0 :(得分:3)

****** 更新的答案 *******

SWF 2.4.2现已上市spring.io/blog/2015/09/01/spring-web-flow-2-4-2-released

将解决此问题。

-Neil McGuigan

****** OLD ANSWER *******

for:import org.springframework.security.access.vote.AffirmativeBased

AffirmativeBased() 已过时。 使用带选民名单的构造函数

http://docs.spring.io/autorepo/docs/spring-security/3.2.3.RELEASE/apidocs/org/springframework/security/access/vote/AffirmativeBased.html

http://docs.spring.io/autorepo/docs/spring-security/4.0.1.RELEASE/apidocs/org/springframework/security/access/vote/AffirmativeBased.html

在较新的Spring Security 4.0.1中已删除了AffirmativeBased()空构造函数(已在3.2.6中标记为已弃用)

org.springframework.webflow.security.SecurityFlowExecutionListener.decide(SecurityFlowExecutionListener.java:102)

SecurityFlowExectionListener #defision方法在第102行调用此空构造函数。

简短回答: Spring Webflow 2.4.1尚未针对Spring Security 4.0.1进行更新,恢复为3.2.6

长(拍摄)回答:如果你无法恢复并希望继续使用webflow ...这可能是一个长镜头尝试扩展org.springframework.webflow.security.SecurityFlowExecutionListener和@Override决定方法。复制粘贴决定方法的原始代码,但从

更改第102行
            abstractAccessDecisionManager = new AffirmativeBased();

            abstractAccessDecisionManager = new AffirmativeBased(voters);

虽然这可能会解决您当前的问题......我怀疑这会发现进一步的不兼容性问题,但我认为这种变化是微不足道的,值得一试。