【问题标题】:How to secure a socket server with spring security?如何使用 Spring Security 保护套接字服务器?
【发布时间】:2012-03-20 14:03:18
【问题描述】:

我想使用 spring-security 和(最好)基于方法的安全注释来保护基于 spring 的新客户端服务器系统。

有很多用于 web 应用程序的 spring 示例,但到目前为止我还没有找到用于非 web java 应用程序的示例。

基本上,我想以对我的管理 bean 透明的方式处理 netty 套接字的安全性。例如:在 netty 处理程序中对连接的用户进行一次身份验证,并将完整的授权留给 spring-security 和我的管理 bean 上的注释。

这样的事情可能吗?

编辑

我在junit integration tests 中找到了一个使用 spring-security 的示例 我想我可以这样做,但我无法将 IoC 用于我的外墙,所以我不太喜欢这个想法。

【问题讨论】:

    标签: spring-security netty


    【解决方案1】:

    Spring Security 支持使用注解在方法级别进行身份验证处理。您可以尝试“Access Control using @PreAuthorize and @PostAuthorize”中所述的@PreAuthorize 注释 - 尽管我不确定如何在调用该方法之前获得适当的安全上下文。

    【讨论】:

    • 安全上下文正是我担心的地方。包含我想要(至少部分)的最佳示例是 affy.blogspot.de/2005/10/…,但我希望更简单、更透明。
    • 在您提到的示例中,他们正在使用他们在测试类中编写的createSecureContext 方法手动设置上下文。您如何处理应用程序中的身份验证?也许您可以连接您的登录/握手,以便设置类似于示例的安全上下文。
    • 你是对的。根据文档 SecurityContextHolder.getContext() 保存(默认情况下)当前线程的上下文。由于netty为每个连接生成一个线程,这应该可以工作。我会测试这个解决方案
    • 有效。当前线程的身份验证有点混乱,因为我必须直接访问身份验证提供程序,但我现在可以使用方法安全性。
    【解决方案2】:

    虽然我确信您可以将某些东西组合在一起以使其工作,但总的来说 Spring Security 高度专注于保护 web 服务器。特别是,这种关注点在系统的过滤器链架构中很明显,该架构源于 web.xml 中的过滤器委托。

    我不记得核心过滤器链中是否存在依赖于在链中向上和向下传递的 httpRequest 对象,但是如果您要尝试将 Spring Security 包装在套接字周围,此时将适配器放置在适当的位置将是一个可能的起点。

    所以,简而言之,我认为这是可能,但这绝对不会容易,而且可能不会给您带来太多好处,因为大部分架构和默认安全部件都期望被包裹在一个网络请求周围。

    【讨论】:

    • 你能推荐一个替代方案吗?我真的不想手动处理安全问题。由于我想使用 spring 作为 IoC 框架,所以 spring security 看起来是个好主意。
    • 我真的不知道有什么比 Spring Security 更好的了,所以你最好的选择可能只是破解身份验证子系统,直到你可以插入它根据您的需要,然后按原样使用授权系统(只要用户经过身份验证,它应该可以正常工作)
    【解决方案3】:

    答案与spring security无关,但如果你担心的只是“安全”,看看apacheshiro。我看过一些文档说它可以在套接字级别保护,但是现在找不到它...:(

    【讨论】:

      猜你喜欢
      • 2017-07-12
      • 1970-01-01
      • 2014-04-13
      • 2017-05-27
      • 2015-12-11
      • 2015-03-23
      • 2020-11-06
      • 2012-05-06
      • 2017-01-15
      相关资源
      最近更新 更多