当从互联网请求登录页面时,我会在NetBeans GlassFish输出窗口中得到以下结果:
INFO: JACC策略提供程序:权限检查失败:上下文(“WebApplication2 / WebApplication2”),权限((“javax.security.jacc.WebUserDataPermission”“/login.xhtml”“GET”))
当局域网或本地主机发出请求并且页面按照所需的方式通过HTTPS提供时,不会发生此情况。
我正在尝试配置登录页面以使用传输层安全来保护用户密码。我希望可以仅使用Faces Servlet和web.xml部署描述符中的声明性安全性来实现此目的。
我正在使用基于表单的身份验证,并使用非j_security_check自定义Facelet表单进行编程式登录(通过request.login方法)。登录表单在web.xml中具有以下安全约束:
这个表单显然是为未经身份验证的用户设计的,因此没有授权约束元素。安全约束的唯一原因是为了将子元素设置为CONFIDENTIAL,以确保安全连接。
Java EE 6教程here指出:
如果没有授权约束,容器必须在不要求用户身份验证的情况下接受请求。
用户数据约束与基本和基于表单的用户身份验证结合使用非常方便。当登录身份验证方法设置为BASIC或FORM时,密码不受保护,这意味着在未受保护的会话上在客户端和服务器之间发送的密码可以被第三方查看和拦截。使用用户数据约束与用户身份验证机制可以缓解这种问题。在部署描述符中指定身份验证机制的配置在指定身份验证机制中进行了描述。
为什么JACC在访问此资源时执行权限检查,而不需要进行此类检查?为什么只有从Internet访问时才失败,而在局域网上则不会失败?
INFO: JACC策略提供程序:权限检查失败:上下文(“WebApplication2 / WebApplication2”),权限((“javax.security.jacc.WebUserDataPermission”“/login.xhtml”“GET”))
当局域网或本地主机发出请求并且页面按照所需的方式通过HTTPS提供时,不会发生此情况。
我正在尝试配置登录页面以使用传输层安全来保护用户密码。我希望可以仅使用Faces Servlet和web.xml部署描述符中的声明性安全性来实现此目的。
我正在使用基于表单的身份验证,并使用非j_security_check自定义Facelet表单进行编程式登录(通过request.login方法)。登录表单在web.xml中具有以下安全约束:
<security-constraint>
<display-name>secure login</display-name>
<web-resource-collection>
<web-resource-name>login.xhtml</web-resource-name>
<description/>
<url-pattern>/login.xhtml</url-pattern>
</web-resource-collection>
<user-data-constraint>
<description/>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
这个表单显然是为未经身份验证的用户设计的,因此没有授权约束元素。安全约束的唯一原因是为了将子元素设置为CONFIDENTIAL,以确保安全连接。
Java EE 6教程here指出:
如果没有授权约束,容器必须在不要求用户身份验证的情况下接受请求。
用户数据约束与基本和基于表单的用户身份验证结合使用非常方便。当登录身份验证方法设置为BASIC或FORM时,密码不受保护,这意味着在未受保护的会话上在客户端和服务器之间发送的密码可以被第三方查看和拦截。使用用户数据约束与用户身份验证机制可以缓解这种问题。在部署描述符中指定身份验证机制的配置在指定身份验证机制中进行了描述。
为什么JACC在访问此资源时执行权限检查,而不需要进行此类检查?为什么只有从Internet访问时才失败,而在局域网上则不会失败?