使用SecurityContext.getUserRoles()获取用户的角色和组信息
2014-08-20 20:29
771 查看
运行环境:JDeveloper 11.1.2.4.0 + Oracle Database 11gR2 Express Edition。
本实验的目的是比较Container Security和ADF Security API,本实验基于《为ADF
Web应用增加安全》。
1. 在products.jsf中增加如下代码:
<af:inputText label="User" id="it1" value="#{securityBean.currentUser}"/>
<af:inputText label="Groups" id="it2" value="#{securityBean.currentUserGroups}"/>
<af:inputText label="Roles" id="it3" value="#{securityBean.currentUserRoles}"/>
<af:inputText label="Belong To WLS Group: users ?" id="it4" value="Got the users role from weblogic"
rendered="#{securityBean.wlsUserGroup}" columns="80"/>
<af:inputText label="Belong To WLS Role: valid-users" id="it5" value="Got the valid-users mapped by weblogic.xml"
rendered="#{securityBean.containerUserRole}" columns="80"/>
2. 对应的SecurityBean.java代码如下:
package view;
import java.security.Principal;
import java.util.ArrayList;
import java.util.Set;
import javax.faces.context.FacesContext;
import javax.security.auth.Subject;
import oracle.adf.share.ADFContext;
import weblogic.security.Security;
import weblogic.security.SubjectUtils;
import weblogic.security.principal.WLSGroupImpl;
import weblogic.security.principal.WLSUserImpl;
public class SecurityBean {
private String user = null;
private ArrayList groups = new ArrayList();
public SecurityBean() {
Subject subject = Security.getCurrentSubject();
Set allPrincipals = subject.getPrincipals();
for (Principal principal : allPrincipals) {
if (principal instanceof WLSGroupImpl) {
System.out.println("Found WLS Group: " + principal.getName());
groups.add(principal.getName());
}
if (principal instanceof WLSUserImpl) {
System.out.println("Found WLS User: " + principal.getName());
user = principal.getName();
}
}
}
public String getCurrentUserGroups() {
String curGroups = "";
for (String group : groups) {
curGroups = curGroups + ", " + group;
}
return curGroups;
}
public String getCurrentUserRoles() {
ADFContext adfctx = ADFContext.getCurrent();
String[] roles = adfctx.getSecurityContext().getUserRoles();
String curRoles = "";
for (String role : roles) {
curRoles = curRoles + ", " + role;
}
return curRoles;
}
public boolean isWlsUserGroup() {
for (int i = 0; i < groups.size(); i++) {
if ("users".equalsIgnoreCase(groups.get(i))) {
return true;
}
}
return false;
}
public boolean isContainerUserRole() {
if (FacesContext.getCurrentInstance().getExternalContext().isUserInRole("valid-users")) {
return true;
}
return false;
}
public String getCurrentUser() {
return user;
}
}
3. 运行
使用sking/welcome1登录,发现SecurityContext.getUserRoles()返回的是sking所属的组和角色信息,而不只是角色信息,这一点和我们想的有些出入。
Project 下载:SecureApplication(getUserRoles).7z
参考文献:
1. http://blog.whitehorses.nl/2010/01/29/weblogic-web-application-container-security-part-1/
2. http://blog.whitehorses.nl/2010/02/01/weblogic-web-application-container-security-part-2-adf-security/ http://maping930883.blogspot.com/2012/05/adf128securitycontextgetuserroles.html
本实验的目的是比较Container Security和ADF Security API,本实验基于《为ADF
Web应用增加安全》。
1. 在products.jsf中增加如下代码:
<af:inputText label="User" id="it1" value="#{securityBean.currentUser}"/>
<af:inputText label="Groups" id="it2" value="#{securityBean.currentUserGroups}"/>
<af:inputText label="Roles" id="it3" value="#{securityBean.currentUserRoles}"/>
<af:inputText label="Belong To WLS Group: users ?" id="it4" value="Got the users role from weblogic"
rendered="#{securityBean.wlsUserGroup}" columns="80"/>
<af:inputText label="Belong To WLS Role: valid-users" id="it5" value="Got the valid-users mapped by weblogic.xml"
rendered="#{securityBean.containerUserRole}" columns="80"/>
2. 对应的SecurityBean.java代码如下:
package view;
import java.security.Principal;
import java.util.ArrayList;
import java.util.Set;
import javax.faces.context.FacesContext;
import javax.security.auth.Subject;
import oracle.adf.share.ADFContext;
import weblogic.security.Security;
import weblogic.security.SubjectUtils;
import weblogic.security.principal.WLSGroupImpl;
import weblogic.security.principal.WLSUserImpl;
public class SecurityBean {
private String user = null;
private ArrayList groups = new ArrayList();
public SecurityBean() {
Subject subject = Security.getCurrentSubject();
Set allPrincipals = subject.getPrincipals();
for (Principal principal : allPrincipals) {
if (principal instanceof WLSGroupImpl) {
System.out.println("Found WLS Group: " + principal.getName());
groups.add(principal.getName());
}
if (principal instanceof WLSUserImpl) {
System.out.println("Found WLS User: " + principal.getName());
user = principal.getName();
}
}
}
public String getCurrentUserGroups() {
String curGroups = "";
for (String group : groups) {
curGroups = curGroups + ", " + group;
}
return curGroups;
}
public String getCurrentUserRoles() {
ADFContext adfctx = ADFContext.getCurrent();
String[] roles = adfctx.getSecurityContext().getUserRoles();
String curRoles = "";
for (String role : roles) {
curRoles = curRoles + ", " + role;
}
return curRoles;
}
public boolean isWlsUserGroup() {
for (int i = 0; i < groups.size(); i++) {
if ("users".equalsIgnoreCase(groups.get(i))) {
return true;
}
}
return false;
}
public boolean isContainerUserRole() {
if (FacesContext.getCurrentInstance().getExternalContext().isUserInRole("valid-users")) {
return true;
}
return false;
}
public String getCurrentUser() {
return user;
}
}
3. 运行
使用sking/welcome1登录,发现SecurityContext.getUserRoles()返回的是sking所属的组和角色信息,而不只是角色信息,这一点和我们想的有些出入。
Project 下载:SecureApplication(getUserRoles).7z
参考文献:
1. http://blog.whitehorses.nl/2010/01/29/weblogic-web-application-container-security-part-1/
2. http://blog.whitehorses.nl/2010/02/01/weblogic-web-application-container-security-part-2-adf-security/ http://maping930883.blogspot.com/2012/05/adf128securitycontextgetuserroles.html
相关文章推荐
- 使用API中的函数:NetUserEnum来枚举用户 NetUserGetInfo来获取用户的信息
- 一例应用Microsoft.AspNet.Identity初始化角色权限导致的UserManager.GetRoles(user.Id)始终获取不到账号角色问题的解决
- get_user_pages — 获取用户区进程使用内存的某个页
- [转]wx.getUserInfo(OBJECT) 微信小程序 获取用户信息
- ORACLE如何使用DBMS_METADATA.GET_DDL获取表,表空间,用户,视图等的DDL语句
- sharepoint 获取userprofileManager中用户详细信息
- 使用cin获取用户的输入信息
- 使用GetAdaptersInfo获取本地IP信息
- WindowsAPI使用详解——GetComputerName|GetUserName 获取电脑名称和当前用户名
- 步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数、在不同的DataContext之间做更新、缓存、获取信息、数据加载选项和延迟加载
- 使用HttpContext的User属性来实现用户验证
- 如何获取和利用“用户及其使用网站原因的信息”
- 深入浅出InfoPath2007—使用UserGroup Web Service来得到当前用户所在的群组信息
- DMP文件的生成和使用(转),由于须要取得用户出现问题的信息,所以须要取得demp信息,可以通过本方法获取。
- 使用HttpContext中的User属性来实现用户身份验证之用户验证票篇
- 使用HttpContext中的User属性来实现用户身份验证之用户验证票篇
- 使用HttpContext的User属性来实现用户验证
- VC中GetLastError()获取错误信息的使用
- 使用HttpContext的User属性来实现用户身份验证
- 使用HttpContext的User属性来实现用户验证