1

对于 Servlet 安全性,我在 web.xml 中读到我们可以声明

<auth-constraints> and <user-data-constraint> 

用于打开 SSL 和进行身份验证。但到目前为止,我个人还没有在现实生活中的 web.xml 中看到任何这些声明(在 Tomcat 上运行的应用程序,Glassfish)

所以我想知道实现这些目标的替代方法是什么?哪种方式是首选?

4

2 回答 2

3

强烈依赖于使用的应用服务器,但一般情况下,如果不在 AS 级别(而不是部署描述符)启用 SSL,就无法使应用服务器使用 SSL 公开应用程序。

例如对于 Tomcat,SSL 连接器(默认端口 8443)必须在server.xml. 然后,您可以使用 Apache (httpd) 作为反向代理,使用mod_proxymod_jk

在您可以ServletFilter用来拦截所有请求的代码中,如果通信不在 SSL 之上,您可以将用户重定向到某个登录页面。

于 2012-12-22T20:25:17.197 回答
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>

于 2012-12-22T20:25:41.533 回答