- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个方法,如果该人具有特定角色并且他们与 JIRA 中的特定组相关联,则可以调用该方法。由于 JIRA 中的组是动态的,因此我无法为每个 JIRA 组分配一个角色。
@DeclareRoles({
FileServerRoles.FILE_ADDER,
FileServerRoles.FILE_ADDER_ALL,
FileServerRoles.FILE_VIEWER,
FileServerRoles.FILE_VIEWER_ALL})
public final class FileServerRoles {
/**
* A user that can add files to the system.
*/
public static final String FILE_ADDER = "file-adder";
/**
* A user that can add any files to the system.
*/
public static final String FILE_ADDER_ALL = "file-adder-all";
/**
* A user that can view files in the system.
*/
public static final String FILE_VIEWER = "file-viewer";
/**
* A user that can view all files in the system.
*/
public static final String FILE_VIEWER_ALL = "file-viewer-all";
}
我使用 @DeclareRoles
声明所有角色。
@Decorator
public class FileServerServiceProjectAuthorizationDecorator implements FileServerService {
private static Logger LOGGER = LoggerFactory.getLogger(FileServerServiceProjectAuthorizationDecorator.class);
@Inject
@Delegate
@Any
FileServerService delagate;
@Inject
@CurrentUser
Set<JiraProjectReference> currentUserProjectReferences;
@Resource
SessionContext sessionContext;
void verifyProjectKey(final String projectKey) {
for (final JiraProjectReference projectReference : currentUserProjectReferences) {
if (projectReference.getKey().equalsIgnoreCase(projectKey)) {
return;
}
}
throw new IllegalArgumentException("user not in the project");
}
@RolesAllowed({FileServerRoles.FILE_ADDER, FileServerRoles.FILE_ADDER_ALL})
@Override
public FileAddStatus addFileToRepository(final String projectKey, final String issueKey, final String fileName, final String mimeType, final File file) {
if (!sessionContext.isCallerInRole(FileServerRoles.FILE_ADDER_ALL)) {
verifyProjectKey(projectKey);
}
return delagate.addFileToRepository(projectKey, issueKey, fileName, mimeType, file);
}
@RolesAllowed({FileServerRoles.FILE_VIEWER, FileServerRoles.FILE_VIEWER_ALL})
@Override
public FileDescriptor retrieveFileFromRepository(final String projectKey, final String issueKey, final UUID uuid, final String fileName) {
if (!sessionContext.isCallerInRole(FileServerRoles.FILE_VIEWER_ALL)) {
verifyProjectKey(projectKey);
}
return delagate.retrieveFileFromRepository(projectKey, issueKey, uuid, fileName);
}
}
!sessionContext.isCallerInRole(FileServerRoles.FILE_VIEWER_ALL)
总是抛出 IllegalStateException
:
Caused by: java.lang.IllegalStateException: No mapping available for role reference file-viewer-all
at com.sun.ejb.containers.EJBContextImpl.isCallerInRole(EJBContextImpl.java:458)
at edu.wvu.esd.swordfish.web.service.FileServerServiceProjectAuthorizationDecorator.retrieveFileFromRepository(FileServerServiceProjectAuthorizationDecorator.java:59)
... 89 more
对于 @RolesAllowed
中引用的任何角色,我都没有遇到任何问题。我还尝试将角色声明移至 web.xml 中。谷歌上没有太多关于该错误的引用。
有人看过这个吗?你的解决方案是什么?
最佳答案
在 GlassFish 3.1 中的 EJB 中调用 isCallerInRole(roleName) 方法时,我收到了相同的“没有可用于角色引用的映射”错误。对我来说解决这个问题的方法是向我的 EJB 添加适当的 @DeclareRoles 注释。如果传递给 isCallerInRole 的角色名称不在 @DeclareRoles 中,则会抛出 IllegalStateException。我不确定装饰器中的安全性如何工作,但 @DeclareRoles 对我来说是关键。
这是一个简单的例子:
@Stateless
@LocalBean
@DeclareRoles({"user", "admin"})
public class ExampleEJB {
@Resource
private SessionContext sessionContext;
public boolean isUserInRole(String roleName) {
return sessionContext.isCallerInRole(roleName);
}
}
关于java-ee-6 - 没有可用于 sessionContext.isCallerInRole() 的角色引用的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5266589/
我有一个方法,如果该人具有特定角色并且他们与 JIRA 中的特定组相关联,则可以调用该方法。由于 JIRA 中的组是动态的,因此我无法为每个 JIRA 组分配一个角色。 @DeclareRoles({
我需要编写一个 session bean,在代码中的某个位置检查当前用户是否具有某些角色。 为了对我的 EJB3 进行单元测试,我正在尝试 OpenEJB。我按照他们的例子 testing secur
我的环境是 Jboss AS 7.1.0。我正在使用 JUnit 和 Arquillian 进行单元测试。我的 ejb 中有使用 getUserPrincipal() 和 isCallerInRole
我是一名优秀的程序员,十分优秀!