【发布时间】:2017-10-03 13:52:02
【问题描述】:
基本上,我无法让@RolesAllowed 注释工作。容器似乎完全忽略了它。
但是,isCallerInRole() 方法可以正常工作。
只有管理员才能调用下面的方法,但每次都会调用该方法,尽管用户只有“访客”角色。
@Remote
public interface SomeManager {
void performImportantTask();
}
@Stateless
@DeclareRoles({"guest", "admin"})
public class SomeManagerBean implements SomeManager {
@Resource private EJBContext context;
@RolesAllowed({"admin"})
@Override public void performImportantTask() {
logger.info(context.getCallerPrincipal().getName()); // prints the correct user name
if (context.isCallerInRole("admin")) {
logger.info("Is admin"); // doesn't print
}
if (context.isCallerInRole("guest")) {
logger.info("Is guest"); // prints
}
}
}
即使容器清楚地知道用户不是管理员,为什么还要调用这个方法?
我还尝试将 @RolesAllowed 替换为 @DenyAll 并且这不否认 - 该方法仍在执行。
这是 server.xml 中的领域配置:
...
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.DataSourceRealm"
dataSourceName="securityDS"
userTable="users"
userNameCol="user_name"
userCredCol="user_pass"
userRoleTable="user_roles"
roleNameCol="role_name"/>
</Realm>
...
</Engine>
</Service>
</Server>
很可能,我有一些配置问题,但我不知道该去哪里找。 或者我这里有什么误解?
我假设 tomcat_users.xml 文件与 DataSourceRealm 无关。 不过,考虑到我可能需要在这个文件中定义角色,我这样添加它们:
<tomcat-users ...>
<role rolename="admin"/>
<role rolename="guest"/>
</tomcat-users>
但这并没有改变上述情况。
相关文档:
【问题讨论】:
标签: java jakarta-ee apache-tomee