2009-12-25 88 views
0

如何使链接仅在经过身份验证的用户具有通讯权限时才可见?Spring Security基础知识

我正在使用JSF,据我所知,我应该使用组件的rendered属性,它应该调用backing bean的布尔方法。

前段时间我甚至发现了代理代码,但现在我再也找不到它了。那么,谁能给我一个这样的布尔方法的例子与弹簧安全? (或者,甚至更好,链接到描述这个问题的一些文章)。

回答

5

我们使用SecurityContextHolder访问当前登录的用户。然后,我们使用用户getAuthorities()方法获取她的角色,从而产生(大致)以下内容:

((UserDetails)SecurityContextHolder.getPrincipal()).getAuthorities(); 
+0

..并解决特定问题,将其包装在一个getter中,并在布尔表达式中使用它。 – BalusC 2009-12-25 15:46:10

4

rendered属性(和disabledreadonly)不一定指望它返回boolean这样的吸气剂的方法:

public boolean getBooleanValue() { 
    return this.booleanValue; 
} 

这些属性只是希望一个布尔表达,其可以是下列任一例子:

<h:someComponent rendered="#{myBean.booleanValue}" /> 
<h:someComponent rendered="#{myBean.intValue > 10}" /> 
<h:someComponent rendered="#{myBean.objectValue == null}" /> 
<h:someComponent rendered="#{myBean.stringValue != 'someValue'}" /> 
<h:someComponent rendered="#{!empty myBean.collectionValue}" /> 
<h:someComponent rendered="#{!myBean.booleanValue && myBean.intValue != 0}" /> 
<h:someComponent rendered="#{myBean.stringValue == 'oneValue' || myBean.stringValue == 'anotherValue'}" /> 

is前缀是顺便还允许boolean个干将:

public boolean isBooleanValue() { 
    return this.booleanValue; 
} 

你可以用任何API Spring Security的在吸气使用,并在布尔EL表达式使用它在前述方法之一。