6

当从 Internet 向登录页面发出请求时,我从 netbeans glassfish 输出窗口得到这个结果:

INFO: JACC Policy Provider:Failed Permission Check: context (" 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>

没有授权约束元素,因为这种形式显然是为未经身份验证的用户设计的。存在安全约束的唯一原因是可以将子元素设置为 CONFIDENTIAL 以确保安全连接。

Java EE 6 教程在这里指出:

如果没有授权约束,容器必须接受请求而不需要用户认证

用户数据约束与基本和基于表单的用户身份验证结合使用很方便。当登录验证方法设置为 BASIC 或 FORM 时,密码不受保护,这意味着在未受保护的会话中客户端和服务器之间发送的密码可以被第三方查看和截获。将用户数据约束与用户身份验证机制一起使用可以减轻这种担忧。在部署描述符中指定身份验证机制中描述了配置用户身份验证机制。

为什么在访问该资源不需要此类检查时,JACC 会进行权限检查?为什么它只在互联网上而不是在局域网上失败?

4

1 回答 1

4

只需清理项目并重新启动服务器!这对我来说很好!有时会有某些文件会被缓存在缓存中!这些文件可能会导致此错误!因此,在清理项目时,错误将得到修复!!

于 2017-11-17T04:43:26.523 回答