当从互联网向登录页面发出请求时,我从netbeans glassfish输出窗口获得此结果:
信息:JACC策略提供程序:失败的权限检查:上下文(“WebApplication2 / WebApplication2”),权限(“(”javax.security.jacc.WebUserDataPermission“”/ login.xhtml“”GET“)”)
当从LAN或localhost发出请求并且页面是根据需要通过HTTPS提供时,不会发生这种情况。
我正在尝试配置登录页面以使用传输层安全性来在登录请求期间保护用户密码。我希望只能在web.xml部署描述符中使用具有声明性安全性的Faces Servlet来实现这一点。
我正在使用基于表单的身份验证和非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>
没有授权约束元素,因为此表单显然适用于未经身份验证的用户。存在安全约束的唯一原因是可以将子元素设置为机密以确保安全连接。
Java EE 6教程指出here:
如果没有授权约束,则容器必须接受请求而不需要用户身份验证
和
用户数据约束可以方便地与基本和基于表单的用户身份验证结合使用。当登录验证方法设置为BASIC或FORM时,密码不受保护,这意味着可以在第三方查看和拦截在不受保护的会话中在客户端和服务器之间发送的密码。使用具有用户认证机制的用户数据约束可以缓解这种担忧。配置用户身份验证机制在部署描述符中指定身份验证机制中进行了描述。
为什么JACC在访问此资源时不需要进行此类检查时会进行权限检查?为什么它只能从互联网上而不是局域网上失败?
答案 0 :(得分:3)
只需清理项目并重启服务器即可!这对我来说很好!!有时会有一些文件会在缓存中出现!这些文件可能会导致此错误!因此,在清理项目时,错误将得到修复!!