gpt4 book ai didi

java - 在不使用用户名密码身份验证的情况下保护 servlet URL

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

我有一个带有 EJB 模块和 Web 应用程序模块(servlet)的企业应用程序。我正在使用 URLConnection 从 EJB 访问 servlet URL,但想以某种安全方式保护 URL。我不想使用用户名和密码进行身份验证,因为我不能使用任何单点登录解决方案,所以我想是否有办法限制 URL 只能从其企业应用程序访问。请帮忙。

最佳答案

您遗漏了很多信息:

  • servlet 是仅供您的 EJB 模块使用,还是其他客户端也使用?
  • servlet 和 EJB 模块是否在同一个容器中运行?同一台物理机?
  • 您使用的是什么网络服务器/servlet 容器/J2EE 容器?

如果 servlet 仅由 EJB 模块使用,并且它们都在同一台机器上,那么您只需将 Web 容器配置为仅接受来自 localhost 的连接并更改您的 EJB 的 URL模块用于指向 localhost 而不是公共(public)域名或 IP 地址。

如果它们在不同的机器上,或者如果您的 servlet 被其他客户端使用,那么您将需要以某种方式验证 EJB 模块。您可以使用 SSL 客户端证书(请参阅 this question )或配置您的 servlet 容器以允许来自 EJB 模块的 IP 地址的连接。

编辑

使用 servlet 过滤器来控制访问非常简单。在您的情况下,您想要验证请求是否来自本地主机。如果不是,则将未经授权的消息发送回客户端。

下面是一个非常简单的 doFilter 方法实现,它可以做到这一点:

public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws ServletException, IOException
{
if (!request.getRemoteAddr().equals("127.0.0.1")) {
HttpServletResponse rsp = (HttpServletResponse) response;
rsp.sendError(HttpServletResponse.SC_FORBIDDEN, "You are not authorized to access this resource.");
}

chain.doFilter(request, response);
}

使用如下内容将过滤器添加到您的 web.xml:

<filter>
<filter-name>AuthorizationFilter</filter-name>
<filter-class>com.foo.bar.AuthorizationFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>AuthorizationFilter</filter-name>
<servlet-name>RestrictedServlet</servlet-name>
</filter-mapping>

过滤器按照它们在 web.xml 中出现的顺序执行,因此请确保授权过滤器列在第一个。

说了这么多,我同意 BalusC 的观点。如果可能的话,您应该重构您的代码,以便 EJB 模块直接执行代码,而不是进行 servlet 调用。

关于java - 在不使用用户名密码身份验证的情况下保护 servlet URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4862325/

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