当前位置: 首页 > 知识库问答 >
问题:

实现接口时未创建带有@Secured注释的类

曾航
2023-03-14

我有这个问题,无法理解如何修复它,任何帮助都将得到评估。我需要用一些身份验证来保护REST方法,并且我在我的应用程序中有几个角色。我在我的类中的方法中放置了@安全注释,实现了一些接口和Spring没有创建没有任何日志消息的bean(@Controller在我的例子中)。但是如果类没有实现接口-bean创建得很好。

在代码中,它如下所示:

控制器:

public class Controller implements API {
   @Secured("ROLE_ADMIN")
   @RequestMapping(value = "/one/", method = RequestMethod.GET)
   public String test() {
      return "ONE";
   }
}

接口:

public interface API {
   String test();
}

在我的情况下,控制器bean没有创建。但是如果我删除实现API一切都会正常工作,bean将被创建并且安全性将起作用。

我使用基于XML的配置和位置

<secutiry:global-method-security pre-post-annotations="enabled" jsr250-annotations="enabled" secured-annotations="enabled"> 

在mvc配置中。xml来启用注释。

我跟踪了它,若在类中的方法处放置的注释并没有实现接口,Spring将使用MethodSecurityMetadataSourceAdvisor。MethodSecurityMetadataSourcePointcut构建上下文时,但当类实现接口时–Spring使用TransactionAttributeSourcePointcut。

@Rlet准许给出了相同的效果。

在版本检查

<spring.version>4.3.7.RELEASE</spring.version>
<spring-security.version>4.2.2.RELEASE</spring-security.version>

<spring.version>4.3.23.RELEASE</spring.version>
<spring-security.version>4.2.13.RELEASE</spring-security.version>

最新的Spring Boot具有相同的效果。

有人解决了相同的问题吗?非常感谢。

共有1个答案

周伟泽
2023-03-14

尝试在config类的类级别添加此-@EnableGlobalMethodSecurity(securedEnabled=true),我们可以在任何@配置实例上使用@EnableGlobalMethodSecurity注释来启用基于注释的安全性。例如,以下内容将启用Spring Security的@Secured注释。

@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true)
public class MethodSecurityConfig {
   // ...
}
 类似资料:
  • 假设您有一个接口 和两个实现类

  • 问题内容: 是否可以在运行时创建hibernate的Entity类(带有注释)?它应与也在运行时中添加的表相关。重要的是,该实体应该对Hibernate可见。一般情况下是否可能,请您给我有关该问题的任何建议吗?我了解,反射是关键字,但需要更多的单词。问候。 问题答案: 在这种情况下,您可能希望在运行时以编程方式创建Hibernate Session Factory,并传入创建的新映射,请访问htt

  • 问题内容: 是否可以在运行时创建休眠的Entity类(带有注释)?它应该与也在运行时添加的表相关。重要的是,该实体应该对Hibernate可见。一般情况下是否可能,请您给我有关该问题的任何建议吗?我了解,反射是关键字,但需要更多的单词。问候。 问题答案: 在这种情况下,您可能希望在运行时以编程方式创建Hibernate Session Factory,传入您创建的新映射,并查看http://doc

  • 问题内容: 是否存在列注释语法,该语法允许我直接在创建表语句(即,内联)中声明列的位置指定列注释?该11克规范没有提到任何东西,在另一页中提到的东西,但我无法得到它的工作。创建表后有一种指定注释的方法,但是我认为将注释与字段定义分开很烦人。我正在寻找这样的东西(不起作用): 问题答案: 恐怕“烦人”的语法是这样做的唯一方法。SQL Server,PostgreSQL和DB2使用相同的语法(尽管据我

  • 我创建了一个包含一些基本crud方法的CrudController。这很好用。当我想保护这个控制器时,我可以重写超类中的方法,这很好。然而,我不想仅仅为了安全而重写每个方法。为此,我想在类上使用@Secured或@PreAuthorize。 我使用的是Spring Boot 2.2.2(最新版本)。 示例Crud基类 实现类 预期行为 当一个类被注释为@PreAuthorize或@安全时,我希望所

  • 问题内容: 有没有理由不将Controller映射为接口? 在所有的示例和问题中,我看到了周围的控制器,都是具体的类。是否有一个原因?我想将请求映射与实现分开。但是,当我尝试在具体类中获取a 作为参数时,我碰壁了。 我的Controller界面如下所示: And the implementing class: 该方法效果很好;在抛出一个异常 如果我将注释添加到具体类中,那么一切都会按预期工作,但是