我有一个带EJB模块和Web应用程序模块(servlet)的企业应用程序。我使用URLConnection从EJB访问servlet URL,但希望以一定的安全性保护URL。我不想使用用户名和密码进行身份验证,因为我无法使用任何单一登录解决方案,所以我想如果有一种方法可以限制只能从其企业应用程序访问的URL。请帮忙。在不使用用户名密码认证的情况下保护servlet URL
2
A
回答
1
1
可以用来部署你的servlet的应用程序,并使用该用户保护应用程序的应用程序服务器中创建用户凭据(例如使用基本身份验证):
<security-constraint>
<web-resource-collection>
<web-resource-name>
Entire Application
</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>member</role-name>
</auth-constraint>
</security-constraint>
然后,您可以使用您的EJB认证。
3
有很多的信息,你忽略了:
- 只有通过你的EJB模块使用的小服务程序,或者它也可用于其他客户端?
- Servlet和EJB模块是否在同一个容器中运行?同一台物理机器?
- 您使用的是什么web服务器/ servlet容器/ J2EE容器?
如果servlet仅由EJB模块,它们都在同一台机器上,那么你可以配置你的Web容器只能从localhost
接受连接,改变你的EJB模块使用指向的URL在localhost
而不是一个公共域名或IP地址。
如果它们位于不同的机器上,或者您的servlet被其他客户端使用,那么您将需要以某种方式验证EJB模块。您可以使用SSL客户端证书(请参阅this question)或配置您的servlet容器以允许来自EJB模块IP地址的连接。
EDIT
使用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调用。
相关问题
- 1. 使用用户名密码保护URL
- 2. 在不验证用户身份的情况下验证用户名和密码
- 3. 在不询问用户名/密码的情况下授权用户使用oneDrive
- 4. 如何在不输入密码的情况下发送用户名和密码?
- 5. SVN认证的用户名,密码和URL使用SVN套件
- 6. 如何在不使用验证码的情况下保护JSON电话
- 7. 如何在不使用设计确认密码的情况下更新帐户?
- 8. PHPSecLib受密码保护的RSA和用户认证
- 9. 如何保护用户名,密码,api_keys
- 10. 如何在默认情况下为sql/xampp添加用户名和密码?
- 11. 尝试使用htaccess密码保护URL
- 12. Oracle - 在不打开其他连接的情况下验证用户和密码?
- 13. 如何密码保护Excel用户窗体但允许它在没有密码的情况下重新打开?
- 14. 如何在不使用SSL的情况下保护登录?
- 15. 如何在不使用SSL的情况下保护POST方法?
- 16. 在PowerShell中使用REST API for TFS 2015.2如何在不使用脚本的情况下保护密码
- 17. CakePHP:在不更改密码的情况下编辑用户
- 18. Node.js用户名和密码认证
- 19. NetNamedPipeBinding和用户名/密码认证
- 20. 用户名和密码认证角
- 21. 通过Ajax保护密码认证
- 22. 在密码加密的情况下登录用户
- 23. 如何在没有SSL的情况下保护用户的身份验证?
- 24. 在不改变密码的情况下保存Django用户表单
- 25. 在不知道密码的情况下解锁受保护的工作簿
- 26. 在不使用Cookie的情况下维护会话并且不使用URL
- 27. 使用登录名保护密码
- 28. 如何在不更改url的情况下调用servlet?
- 29. 在不知道现有密码的情况下修改用户密码
- 30. 保护REST API的用户/密码
我试过将常见的类重构成另一个jar,但似乎有太多的其他类的依赖关系,所以它仍然失败,我仍在调查。但是建议将整个jar文件从WEB-INF/lib移动到APP-INF/lib,以便这些类可以被EJB和webapp模块访问?是否会有任何类加载器相关的问题或容器初始化servlet的任何问题? – krish 2011-03-01 04:36:36
请让我知道如果我在上面的评论中的问题应该作为一个单独的问题? – krish 2011-03-01 04:38:08