使用Spring安全性配置Spring MVC应用程序的好习惯是什么?

时间:2013-11-04 21:56:43

标签: spring spring-mvc spring-security

假设我有Spring安全的Spring MVC驱动应用程序。我有:

  1. UserBean类,它为表User
  2. 提供CRUD操作
  3. UserController:将用户上的操作公开给http客户端
  4. 的控制器
  5. UserLogin:Spring安全认证提供程序,用于对用户进行身份验证。
  6. 如果符合以下条件,我应该如何配置我的应用程序:

    1. 我想要简单的XML配置,通过注释自动发现bean(< context:component-scan base-package =“org.example”/>)
    2. UserLogin和UserController需要UserBean才能工作
    3. UserLogin和UserController使用事务注释和方面注释
    4. 我看到以下机会:

      创建一个公共的Spring XML配置文件,由DispatcherServlet和ContextLoaderListener

      使用
      • 缺点:没有人在教程中显示该解决方案。所有bean都是重复的(ContextLoaderListener上下文中的一个实例,DispatcherServlet中的第二个实例)。重复可能会导致一些难以跟踪的错误。重复不是很优雅

      创建两个Spring XML配置文件,一个用于ContextLoaderListener(main),另一个用于DispatcherServlet(控制器)。 UserBean在第一个配置中声明,在第二个配置中可见

      • 缺点:为避免重复,我必须向两个文件添加复杂的组件扫描规则(上下文:组件扫描)。 < tx:annotation-driven和< aop:aspectj-autoproxy />必须在两个文件中定义。在宣布新内容时,我仍然会怀疑哪个配置文件是合适的。

      创建两个Spring XML配置文件,并包含第三个用于常见设置,例如< tx:annotation-driven

      • 缺点:我想要简单的解决方案......

      总结:我正在寻找使用Spring MVC + Spring Security配置应用程序的良好实践。安全部分与业务部分高度连接。我正在寻找好的例子,但我总是发现安全代码与业务代码隔离的情况。但我需要安全和业务共享代码的例子

      类似的问题:ContextLoaderListener or not?

2 个答案:

答案 0 :(得分:2)

我的配置有两个xml文件,没有特别的原因,这就是它的运作方式。

这些示例弹簧安全项目提供了许多不同类型配置的良好示例,也许您可​​以找到适合您的内容:

https://github.com/spring-projects/spring-security/tree/master/samples

答案 1 :(得分:0)

我的问题中的隐藏信息是:有两个上下文是愚蠢的。

  1. 有人已经注意到了吗?
  2. 有没有办法进行单一应用程序配置?
  3. 数目:

    1. 是。 https://jira.springsource.org/browse/SPR-6903
    2. 是。 https://github.com/michaldo/spring-single-context-demo
    3. 此处描述了适用于我的案例的最佳做法:https://stackoverflow.com/a/14032213/2365727