在JSF中手动设置用户的角色

时间:2016-02-03 12:13:27

标签: java jsf authentication

我有一些JSF 2应用程序正在使用JSF Secutiry LoginModule(auth-method = FORM)。但是现在通过一种新的方式进行身份验证,这意味着我必须手动编写身份验证交互。

那没关系,但现在我在设置角色方面遇到了问题。我无法找到我可以设置校长的地方,或者无法做到这一点,或者获得共享状态来放置" javax.security.auth.principal"和" javax.security.auth.roles"变量

有办法吗?以下是我实际Bean代码的示例。

提前致谢!

@ManagedBean
@ViewScoped
public class PrincipalController extends AbstractController implements ExcluirRascunhoService.Presenter {

    // has get and set      
    @ManagedProperty(value = "#{autenticacaoController}")
    private AutenticacaoController autenticacaoController;


    @PostConstruct
    private void init() {
        try {
                // a previous application redirected the user here, 
                // giving two parameters, including a valid and calculated HASH
                // to be passed to authentication

            Map<String, String> requestMap = getContext().getRequestParameterMap();
                String user = (String) requestMap.get("login");
                String hash = (String) requestMap.get("hash");

                // this will do the authentication, communicating with a
                // webservice and passing these data so the webservice can
                // authenticate the data, telling me if the user is Ok
                autenticacaoController.authenticate(user, hash); 

                // do the other things if authentication doesn't throw an exception    

                // I should now fill all user's Roles accordingly to my database
                // I get them correctly, but how to set them into the JSF Roles?
        } catch (AuthenticationException e) {
                // catch and quit the page
        }
    }

}

1 个答案:

答案 0 :(得分:0)

您无法单独使用JSF。基本上,JSF只提供一个实用程序来直接从JSF接口获取用户及其角色。因此,如果要从应用程序访问主体用户及其角色,则必须首先对用户进行身份验证。

要对您的用户进行身份验证,您可以使用第三方解决方案(如JAAS或Apache Shiro)来设置领域,角色并控制应用程序的身份验证。

您也可以滚动自己的身份验证层,这可能无法让您使用一些有用的JSF实用程序,例如直接从领域获取主要用户或其角色(请注意,您的自定义层可能会提供获取这些值的其他方法),但也将提供自定义方式来进行所需的身份验证。

我找到了一个关于JAAS authentication layer(葡萄牙语)的非常好的教程,可以帮助您设置身份验证层。

祝你好运,并随时问你是否对我所说的话有任何疑问。