Servlet声明性安全性

时间:2012-12-22 20:17:19

标签: java java-ee authentication servlets

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

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

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

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

2 个答案:

答案 0 :(得分:3)

强烈依赖于使用过的应用程序服务器,但通常无法使应用程序服务器使用SSL公开应用程序而不在AS级别(而不是部署描述符)上启用它。

例如,对于Tomcat,必须在server.xml中启用SSL连接器(默认端口8443)。然后,您可以使用mod_proxymod_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>