JSF 安全禁忌,用于在用户未登录时保护链接



我有一个定义了安全约束的JSF2(GlassFish 3.0)应用程序(下面的示例)。 我的问题是,我有一个"注册"链接,当用户登录时应该无法访问。

也就是说,如果他们尝试点击"/signup.jsf",如果他们被登录,他们应该能够访问;所以如果有任何角色,他们应该无法看到页面。

有没有办法做这样的"反向"安全约束?

欢迎任何建议,谢谢!抢

我的应用程序中的示例约束,如果有用:

<security-constraint>
    <display-name>profileForm</display-name>
    <web-resource-collection>
        <web-resource-name>profileForm</web-resource-name>
        <url-pattern>/profileForm.jsf</url-pattern>
        <http-method>DELETE</http-method>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
        <http-method>PUT</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>GENERAL</role-name>
        <role-name>ADMIN</role-name>
        <role-name>STAFF</role-name>
        <role-name>INSTRUCTOR</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>

只需创建一个完全可以做到这一点的Filter

@WebFilter(urlPatterns={"/signup.jsf"})
public class SignupFilter implements Filter {
    
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // ...
        if (userIsLoggedIn) {
            ((HttpServletResponse) response).sendRedirect("already_loggedin.jsf");
        } else {
            chain.doFilter(request, response);
        }
    }
    // ...
}

实际上,标准 JSF 在授权/身份验证方面没有提供任何现成的东西。JSF 只是一个基于组件的 MVC 框架。

另请参阅:

  • 我们的 Servlet 过滤器 wiki 页面

相关内容

  • 没有找到相关文章

最新更新