对于 Servlet 安全性,我在 web.xml 中读到我们可以声明
<auth-constraints> and <user-data-constraint>
用于打开 SSL 和进行身份验证。但到目前为止,我个人还没有在现实生活中的 web.xml 中看到任何这些声明(在 Tomcat 上运行的应用程序,Glassfish)
所以我想知道实现这些目标的替代方法是什么?哪种方式是首选?
对于 Servlet 安全性,我在 web.xml 中读到我们可以声明
<auth-constraints> and <user-data-constraint>
用于打开 SSL 和进行身份验证。但到目前为止,我个人还没有在现实生活中的 web.xml 中看到任何这些声明(在 Tomcat 上运行的应用程序,Glassfish)
所以我想知道实现这些目标的替代方法是什么?哪种方式是首选?
强烈依赖于使用的应用服务器,但一般情况下,如果不在 AS 级别(而不是部署描述符)启用 SSL,就无法使应用服务器使用 SSL 公开应用程序。
例如对于 Tomcat,SSL 连接器(默认端口 8443)必须在server.xml
. 然后,您可以使用 Apache (httpd) 作为反向代理,使用mod_proxy
或mod_jk
。
在您可以ServletFilter
用来拦截所有请求的代码中,如果通信不在 SSL 之上,您可以将用户重定向到某个登录页面。
首先您声明角色,可以使用注释或在 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>