配置 Java Servlet 3.1 支持以实现安全性
按 Java™ Servlet 3.1 规范中的定义,Liberty 支持所有安全性更新。
关于此任务
在 Liberty 上采用 Java Servlet 3.1 功能部件。
过程
- 在 server.xml 文件中添加 servlet-3.1 功能部件:
<feature>servlet-3.1</feature>
- 确定要使用的以下 Java Servlet 3.1 功能:
- 在登录表单中指定 autocomplete=off。对表单登录页面使用 HTML 时,将密码表单字段设置为 autocomplete="off" 以禁止在 Web 浏览器中自动填写密码。例如:
<form method="POST" action="j_security_check"> <input type="text" name="j_username"> <input type="password" name="j_password" autocomplete="off"> </form>
- 指定所有认证安全性约束 (**)。特殊角色名称 ** 指定任何已认证用户。** 显示在授权约束中时,如果用户通过认证,那么该用户具有对该约束中指定的方法的访问权。用户不必在应用程序绑定中映射至此角色。例如:
<security-constraint id="SecurityConstraint_1"> <web-resource-collection id="WebResourceCollection_1"> <web-resource-name>Protected with ** role</web-resource-name> <url-pattern>/AnyAuthSecurityConstraint</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint id="AuthConstraint_1"> <role-name>**</role-name> </auth-constraint> </security-constraint>
使用角色名 ** 调用 isUserInRole() 方法时,如果用户通过认证,那么 isUserInRole() 返回 true。如果 ** 是安全角色的配置中的已定义角色,那么它不会被视为任何特殊已认证用户角色。该用户必须在应用程序绑定中映射至该角色,isUserInRole 才能返回 true。
- 在 web.xml 文件中指定 deny-uncovered-http-methods 标记。如果在 web.xml 文件中指定了 deny-uncovered-http-methods 元素,那么该容器拒绝符合以下条件的任何已发现 HTTP 方法:最符合请求 URL 的 URL 模式的组合安全性约束内未枚举这些方法。将返回 403 (SC_FORBIDDEN) 状态码。例如:
<servlet-mapping id="ServletMapping_1"> <servlet-name>MyServlet</servlet-name> <url-pattern>/MyURLPattern</url-pattern> </servlet-mapping> <deny-uncovered-http-methods/> <!-- SECURITY CONSTRAINTS --> <security-constraint id="SecurityConstraint_1"> <web-resource-collection id="WebResourceCollection_1"> <web-resource-name>Protected with Employee or Manager roles</web-resource-name> <url-pattern>/MyURLPattern</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint id="AuthConstraint_1"> <role-name>Employee</role-name> <role-name>Manager</role-name> </auth-constraint> </security-constraint>
如果在 web.xml 文件中指定了 deny-uncovered-http-methods 元素,那么 messages.log 文件中将对每个 servlet 中的每个 URL 模式记录一条消息,此消息指示已发现方法,并且带有一个注释,说明这些已发现方法不受保护并且不可访问。例如:对于 servlet MyServlet 中的 URL MyURLPattern,发现以下 HTTP 方法并且它们不可访问:DELETE OPTIONS HEAD PUT TRACE
如果未在 web.xml 文件中指定 deny-uncovered-http-methods 元素,那么 messages.log 文件中将对每个 servlet 中的每个 URL 模式记录一条消息,此消息指示已发现方法,并且带有一个注释,说明这些已发现方法不受保护并且可访问。例如:对于 servlet MyServlet 中的 URL MyURLPattern,发现以下 HTTP 方法并且它们可访问:DELETE OPTIONS HEAD PUT TRACE
- 在登录表单中指定 autocomplete=off。
结果


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=twlp_servlet31
文件名:twlp_servlet31.html