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

在控制器的RequestMapping中启用ConditionalOnProperty

壤驷穆冉
2023-03-14

我有一段代码-

    @PropertySource(value = "classpath:securityConfig.properties", ignoreResourceNotFound = true)
    @Controller
    public class IndexController {
        private static final String LOGIN_PAGE           = "login";
        private static final String HOME_PAGE            = "home";
        private static final String LOBBY_PAGE           = "lobby";
        private static final String FORGOT_USER_PAGE     = "forgotUserName";
        private static final String FORGOT_PASSWORD_PAGE = "forgotPassWord";

        @ConditionalOnProperty(name = "auth.mode", havingValue = "fixed")
        @PreAuthorize("isAnonymous()")
        @RequestMapping(method = RequestMethod.GET, value = { "/login" })
        public String getIndexPage() {
            return LOGIN_PAGE;
        }
}

但是,ConditionalOn 批注无法按预期方式工作。我不希望控制器执行,如果auth.mode不是固定的。注意 - 身份验证模式位于安全性配置文件

我错过了什么吗?可能是类级别的注释?

共有2个答案

司寇星海
2023-03-14

编辑@PreAuthorize注释以添加条件

@PropertySource(value = "classpath:securityConfig.properties", ignoreResourceNotFound = true)
@Controller
public class IndexController {
    private static final String LOGIN_PAGE           = "login";
    private static final String HOME_PAGE            = "home";
    private static final String LOBBY_PAGE           = "lobby";
    private static final String FORGOT_USER_PAGE     = "forgotUserName";
    private static final String FORGOT_PASSWORD_PAGE = "forgotPassWord";

    @Value("${auth.mode:fixed}")
    private String authenticationMode;

    public String getAuthenticationMode(){
         return this.authenticationMode;
    }

    @PreAuthorize("isAnonymous() AND this.getAuthenticationMode().equals(\"fixed\")")
    @RequestMapping(method = RequestMethod.GET, value = { "/login" })
    public String getIndexPage() {
        return LOGIN_PAGE;
    }
云开诚
2023-03-14

您应该将< code > @ ConditionalOnProperty 批注移动到类中,而不是方法上。

@PropertySource(value = "classpath:securityConfig.properties", ignoreResourceNotFound = true)
@Controller
@ConditionalOnProperty(name = "auth.mode", havingValue = "fixed")
public class IndexController {
    ...
}

这意味着除非满足条件,否则整个控制器将不存在于应用程序上下文中。

 类似资料:
  • 我需要控制我回来的东西。我希望/注释方法,以便获得适当的头。

  • 问题内容: 使用多个消费和生产的Spring控制器,我的代码到处都是长注释,例如: 有没有产生“复合/继承/聚合”与注释的方式 默认 为值和,这样,我可以代替写是这样的: 我们如何定义上面的东西?注意和一样,传入了和,也可以传入,或者如果默认值不合适,也很好。 我需要控制我要返回的内容。我需要/ 批注方法,以便获得适当的标题。 问题答案: 从Spring 4.2.x开始,您可以创建自定义映射注释,

  • 这个动作被一个LoginController映射,成功登录后,用户回到相同的,但作为登录用户,并用欢迎消息迎接用户。 index.htm还有另一个名为itemform的表单,它允许用户将项目名称作为文本添加。此操作由itemController控制。 我的问题是我的LoginController和itemController都有相同的请求映射,因此我得到了这个错误: 创建名为“org”的bean时

  • 嗨,我用spring初始化器创建了一个简单的Spring Boot应用程序。我在主应用程序类的同一文件夹中添加了一个控制器。 这是给我以下错误的网址http://localhost:8080/welcome 此应用程序没有针对/错误的显式映射,因此您将其视为回退。 Sat Dec 19 12:51:44 IST 2020出现意外错误(类型=未找到,状态=404)。 如果我使用@restContro

  • 问题内容: 给定某种带有请求映射的控制器 您将如何在方面类中检索方法值(RequestMethod.POST)? 我想跟踪执行POST请求的所有控制器方法。 谢谢 问题答案: 找到了解决方案。 请注意要导入的类。

  • 关于Spring Boot REST Controller的单元测试,我遇到了@RequestMapping和应用程序属性的问题。 我正在处理应用程序的几个概要文件,因此我有几个文件。在每个文件中都设置并显示属性值。我还有一个用于测试的不同的Spring上下文配置,它与生产性版本仅有一个Bean不同。 on Test, , 使用构建MockMVC 在测试中自动调用RESTController 在S