我有一些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
}
}
}
答案 0 :(得分:0)
您无法单独使用JSF。基本上,JSF只提供一个实用程序来直接从JSF接口获取用户及其角色。因此,如果要从应用程序访问主体用户及其角色,则必须首先对用户进行身份验证。
要对您的用户进行身份验证,您可以使用第三方解决方案(如JAAS或Apache Shiro)来设置领域,角色并控制应用程序的身份验证。
您也可以滚动自己的身份验证层,这可能无法让您使用一些有用的JSF实用程序,例如直接从领域获取主要用户或其角色(请注意,您的自定义层可能会提供获取这些值的其他方法),但也将提供自定义方式来进行所需的身份验证。
我找到了一个关于JAAS authentication layer(葡萄牙语)的非常好的教程,可以帮助您设置身份验证层。
祝你好运,并随时问你是否对我所说的话有任何疑问。