对于Servlet安全性,我在web.xml中读到了我们可以声明
<auth-constraints> and <user-data-constraint>
用于打开SSL并进行身份验证。但到目前为止,我个人还没有在现实生活中找到任何这些声明web.xml(在Tomcat上运行的应用程序,Glassfish)
所以我想知道实现这些目标的替代方法是什么?哪种方式更受欢迎?
答案 0 :(得分:3)
强烈依赖于使用过的应用程序服务器,但通常无法使应用程序服务器使用SSL公开应用程序而不在AS级别(而不是部署描述符)上启用它。
例如,对于Tomcat,必须在server.xml
中启用SSL连接器(默认端口8443)。然后,您可以使用mod_proxy
或mod_jk
将Apache(httpd)用作反向代理。
在代码中,您可以使用ServletFilter
拦截所有请求,如果通信不在SSL之上,您可以将用户重定向到某个登录页面。
答案 1 :(得分:1)
首先声明角色,可以使用注释或在web.xml中执行:
@DeclareRoles("userRole")
public class SomeServlet extends HttpServlet {
...
}
然后您将<security-constraint>
添加到web.xml
:
<security-constraint>
<display-name>SecurityConstraint</display-name>
<web-resource-collection>
<web-resource-name>SomeServlet</web-resource-name>
<url-pattern>/some_servlet</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>userRole</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>file</realm-name>
</login-config>
<url-pattern>
是要保护的模式。
对于SSL,您将CONFIDENTIAL
放入<transport-guarantee>