当从互联网向登录页面发出请求时,我从netbeans glassfish输出窗口获得此结果:
INFO: JACC Policy Provider:Failed Permission Check: context (" WebApplication2/WebApplication2 "), Permission (" ("javax.security.jacc. "WebUserDataPermission" "/login.xhtml" "GET")")
当从局域网或本地主机发出请求并且根据需要通过HTTPS提供页面时,这种情况不会发生。
我正在尝试配置登录页面使用传输层安全性来保护登录请求期间的用户密码。我希望在web.xml部署描述符中只使用具有声明性安全性的Faces Servlet就可以实现这一点。
我使用基于表单的身份验证,通过请求使用非j_security_check自定义Facelet表单进行编程登录。登录方法。登录表单在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教程在这里声明:
如果没有授权约束,容器必须接受请求而不需要用户身份验证
和
用户数据约束可以方便地与基本的和基于表单的用户身份验证结合使用。当登录认证方式设置为BASIC或FORM时,密码不受保护,这意味着在未受保护的会话中客户端和服务器之间发送的密码可以被第三方查看和拦截。在用户身份验证机制中使用用户数据约束可以减轻这种担忧。配置用户身份验证机制请参见在部署描述符中指定身份验证机制。
为什么在访问资源不需要进行权限检查的情况下,JACC要进行权限检查?为什么它只在互联网上失败,而不是在局域网上失败?
清理项目并重新启动服务器!!这对我来说很好!!有时会有一个特定的文件,将被捕获在缓存中!!这些文件可能会导致这个错误!!所以在清理项目的错误将得到修复!!