Java 通过预授权保护vaadin 8视图(spring security)

Java 通过预授权保护vaadin 8视图(spring security),java,spring,spring-boot,spring-security,vaadin8,Java,Spring,Spring Boot,Spring Security,Vaadin8,我目前正在开发一个带有spring boot的Vaadin 8应用程序,正如我在许多帖子上读到的那样,保护视图的正确方法是使用预授权对类进行注释。我这样做是为了保护这样的观点: @SpringView(name="arinteractions") @PreAuthorize("hasAuthority('OWNER') or hasAuthority('ADMIN')") public class ARInteractionsView extends SideMenuViewBase { 我遇

我目前正在开发一个带有spring boot的Vaadin 8应用程序,正如我在许多帖子上读到的那样,保护视图的正确方法是使用预授权对类进行注释。我这样做是为了保护这样的观点:

@SpringView(name="arinteractions")
@PreAuthorize("hasAuthority('OWNER') or hasAuthority('ADMIN')")
public class ARInteractionsView extends SideMenuViewBase {
我遇到的第一个问题是我的角色没有角色前缀,所以我添加了这个

尽管如此,spring还是允许用户只需输入其URL(在vaadin中是类似hashbang的#!interactionview)即可输入任何视图

添加此选项允许具有访问权限的用户进入视图,但也允许没有访问权限的用户进入视图。当没有角色的用户尝试输入他打开的视图时。日志显示:

Found view ARStorageBanksView annotated with @PreAuthorize but no access decision manager. Granting access.
并且还会引发一个异常:

org.springframework.security.access.AccessDeniedException 
at org.springframework.security.access.vote.AffirmativeBased.decide(AffirmativeBased.java:84) ~[spring-security-core-5.0.4.RELEASE.jar:5.0.4.RELEASE]
我试图通过在安全配置中添加bean maker方法来添加access决策管理器,但是我没有找到任何关于如何正确实现这一点的文档

此外,添加访问决策管理器只会使情况变得更糟。所有视图都被阻止,日志显示视图“不存在”

我要解决的是使用旧的@Secured注释。出于某种原因,这是完美的工作

Spring的安全角色、权限非常混乱。它的一些对象是字符串,一些是普通对象,auth脚本很难调试,所需的转换并不明显


所以问题是,设置安全性的正确方法是什么,以便我可以使用较新的预授权?

我认为使用@Secured没有什么错,特别是如果它可以工作的话。Vaadin参考应用程序(Bakery)也使用它实现。更多信息请访问:

I See:)。如果有其他人以这种方式实施,它可能是安全的。