如何限制未登录用户对某些页面的访问?(JSF 2.0)



我正在实现自己的身份验证机制,我想知道我所做的是正确的,如果不是,我怎么能正确地做到这一点。

首先,我将解释我的身份验证机制是如何工作的:

-用户的详细信息在一个名为Role的对象中。该节点包含3个字段:

email: String

password: String

userType: Enum

-当用户访问系统时,对象Role保存到会话中。

我的问题是:我如何限制访问某些页面的用户(角色)基于他们的userType字段?

我就是这么做的,但是不管用

首先,我有一个管理bean,检查用户是否被记录。

@ManagedBean
@RequestScoped
public class SecurityController {
    //Some attributes...

    public String redirectNotBuyer() {
        Role role = (Role) FacesContext.getCurrentInstance()
                .getExternalContext().getSessionMap().get("userRole");
        //Checks if user is logged
        if (role == null) {         
            // Please login
            //Add message to authentification
            return "login.xhtml";           
        } else if (role != null) {
            if (!role.getType().toString().equalsIgnoreCase("BUYER")) {
                // Buyer not authorized
                return "main.xhtml";
            }
        }       
        return null;
    }
    public String redirectNotSeller() {
        Role role = (Role) FacesContext.getCurrentInstance()
                .getExternalContext().getSessionMap().get("userRole");
        if (role == null) {
            // Please login
            //Add message to authentification
            return "login.xhtml";           
        } else if (role != null) {
            if (!role.getType().toString().equalsIgnoreCase("SELLERs")) {
                // Buyer not authorized
                return "main.xhtml";
            }
        }       
        return null;
    }
//Getters, setters...

上述两个方法在用户不是买方和卖方的情况下进行重定向。

现在我要做的是在我不希望用户去的页面中调用其中一个方法,这样用户就被重定向到主页面。示例:未经授权的用户进入一个名为buyOffer.xhtml的页面,该页面只有BUYERS可以访问:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core">

<ui:composition template="WEB-INF/templates/BasicTemplate.xhtml">
    <!-- THE REGISTRATION FORM -->
    <ui:define name="buyOfferForm">
       <h2>Buy offer</h2>
       #{SecurityController.redirectNotBuyer()}
    </ui:define>            
</ui:composition>
</html>

由于某种原因,当我与未登录的用户或用户不具有BUYER作为userType的用户一起进入该页时,它不会被重定向到main.xhtml页面。为什么呢?

正确的机制是使用Filter

  • basic-security-in-jsf

相关内容

  • 没有找到相关文章

最新更新