gpt4 book ai didi

java - 外部化 Spring Security 配置?

转载 作者:行者123 更新时间:2023-11-30 07:36:11 28 4
gpt4 key购买 nike

我有一个 Web 应用程序,它已经可以使用 Spring Security 的几种不同配置。但是,这些不同的配置都是在我的 applicationContext 配置文件中设置的。因此,为了在客户站点调整这些,必须在 WAR 文件中进行修改。如果客户手动修改 WAR 文件,那么他们将在重新部署新的 WAR 后丢失更改。

有没有办法外部化这个配置?有没有办法以某种方式使用 JNDI 加载配置?

最佳答案

这是一个有趣的问题。由于 Spring Security 应该在根 webapp 上下文中配置,您不能将其配置外部化到其他上下文。此外,您不能从上下文内部更改配置资源集。所以,你应该从外面做:

  • 您可以使用众所周知的文件系统位置:

     <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    /WEB-INF/applicationContext.xml
    file:///C:\config.xml
    </param-value>
    </context-param>
  • 系统属性在 contextConfigLocation 中解析,因此您可以使用它:

     <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    /WEB-INF/applicationContext.xml
    file:///${configPath}
    </param-value>
    </context-param>

    -DconfigPath=...

  • 您可以覆盖 XmlWebApplicationContext.getResource() 并实现任何您想要的:

    public class MyXmlWebApplicationContext extends XmlWebApplicationContext {
    private static final String JNDI_PREFIX = "jndi:/";
    @Override
    public Resource getResource(String location) {
    if (location.startsWith(JNDI_PREFIX)) return getJndiResource(location);
    else return super.getResource(location);
    }
    protected Resource getJndiResource(String location) { ... }
    }

    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    /WEB-INF/applicationContext.xml
    jndi:/...
    </param-value>
    </context-param>
    <context-param>
    <param-name>contextClass</param-name>
    <param-value>com.example.MyXmlWebApplicationContext</param-value>
    </context-param>

关于java - 外部化 Spring Security 配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3805424/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com