gpt4 book ai didi

java - 在没有 ServletContext 的情况下使用 Guice 配置 Shiro

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:19:58 24 4
gpt4 key购买 nike

我正在使用 Guice 连接一个 Jetty 服务器,我想用 Apache Shiro 增加一些安全性。

似乎 Shiro 需要配置 ServletContext,但问题是我在配置时没有 ServletContext(例如在 ServletModule 中作为文档状态)。 ServletContextGuiceServletContextListener 中可用,但此时我的注入(inject)器已经创建,所以安装 Shiro 模块为时已晚。

我尝试通过 Guice 提供程序 (Provider ) 向 Shiro 提供 ServletContext但仍然没有成功。我认为这个提供者将在创建后为 ServletContext 提供服务。这也会给出警告:

"com.google.inject.servlet.InternalServletModule$BackwardsCompatibleServletContextProvider get
WARNING: You are attempting to use a deprecated API (specifically, attempting to @Inject ServletContext inside an eagerly created singleton. While we allow this for backwards compatibility, be warned that this MAY have unexpected behavior if you have more than one injector (with ServletModule) running in the same JVM."

如何在创建注入(inject)器后安装 Shiro Web 模块?

最佳答案

获取 ServletContext 的标准方法是扩展 GuiceServletContextListener

恕我直言,这是对 API 的重大监督。

http://code.google.com/p/google-guice/issues/detail?id=603

这里还有教程:​​

https://issues.apache.org/jira/browse/SHIRO-320

(编辑:阅读评论后)您有 2 个选择:

  1. 重构代码以仅在 GuiceServletContextListener 中创建注入(inject)器
  2. 使用 child 注入(inject)器(棘手)

对于子注入(inject)器,只有子注入(inject)器创建的实例才会获得“Shiroed”。请记住:为子注入(inject)器创建的即时绑定(bind)将尽可能在祖先注入(inject)器中创建。

对于您的 Servlet 和过滤器,事情将按预期工作,但如果您在已创建的注入(inject)器中有业务逻辑,它们将看不到 Shiro。您可以通过几种方式解决此问题...

关于java - 在没有 ServletContext 的情况下使用 Guice 配置 Shiro,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13642422/

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