我是新来的,尽管我以前已经在这里找到了很多问题的答案。
现在我正在寻求帮助:我的小REST API上有这个小示例资源:
@Path("/greeting")
@PermitAll
public class HelloResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("all")
public String sayHelloToAll() {
return "Hello, everybody!";
}
@GET
@Produces(MediaType.TEXT_PLAIN)
@RolesAllowed("admin")
@Path("admin")
public String sayHelloToAdmin() {
return "Hello, admin!";
}
}
为了过滤角色,我有以下SecurityContext的实现:
public class Authorizer implements SecurityContext {
@Override
public String getAuthenticationScheme() {
return null;
}
@Override
public Principal getUserPrincipal() {
return null;
}
@Override
public boolean isSecure() {
return false;
}
@Override
public boolean isUserInRole(String role) {
return true;
}
}
以及容器请求过滤器的这种实现:
@Provider
@Priority(Priorities.AUTHENTICATION)
public class AuthorizationFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
requestContext.setSecurityContext(new Authorizer());
}
}
这是我的应用程序类:
@ApplicationPath("/")
public class Application extends ResourceConfig {
public Application() {
super(HelloResource.class);
register(AuthorizationFilter.class);
register(RolesAllowedDynamicFeature.class);
}
}
有了所有这些,当我请求URI问候/all时,一切都很好,显示字符串“Hello,大家好!”。但是当我请求URI问候/admin时,即使我的isUserInRole方法总是返回true,也永远不会调用它。事实上,我的过滤器方法总是被调用,但我的isUserInRole方法永远不会被调用。
我遵循了许多建议:
SecurityContext不能与@RolesAllowed一起使用
角色授权允许动态特征和泽西岛
如何访问新泽西资源由@Rele准许保护
使用JAX-RS和泽西进行基于REST令牌的身份验证的最佳实践
但它似乎对任何东西都不起作用。
有人能帮我吗?我不知道,是不是我错过了什么
提前感谢大家。
编辑:当我请求URI问候/管理员时,顺便问一下,我得到403禁止(我忘了说)
查看<code>RoleAllowedRequestFilter<code>的源代码。当用户通过身份验证时,预期会有一个关联的主体
。过滤器在这里检查它
if (rolesAllowed.length > 0 && !isAuthenticated(requestContext)) {
throw new ForbiddenException(LocalizationMessages.USER_NOT_AUTHORIZED());
}
...
private static boolean isAuthenticated(final ContainerRequestContext requestContext) {
return requestContext.getSecurityContext().getUserPrincipal() != null;
}
因此,您需要在< code>SecurityContext的< code>getUserPrincipal中返回一个< code>Principal
@Override
public Principal getUserPrincipal() {
return new Principal() {
@Override
public String getName() {
return "Some Name";
}
};
}
我有一些问题。我为我的应用程序使用了Spring Security,当我标记方法注释@安全(“ROLE_ADMIN”)时,它不起作用。 这security-config.xml 身份验证有效。数据库中的角色是正确的。此代码也有效。
问题内容: 我当时在看使用Jersey的优秀REST教程。在页面下方,构建了一个Web资源,该资源的标题为它本身包含两个实例变量 我想知道确切地如何初始化实例变量和实例变量?我知道使用注释可以注入信息,但是什么时候发生?泽西岛会自动处理吗? 问题答案: Jersey 不会修改 类,但 会 在客户端的每个请求中 创建 它。 之后 类的构造函数被调用,上下文字段注入。 (如果您尝试访问构造函数中的那些
在代码中使用XSLT 2.0的字符映射功能时,我遇到了以下错误。 名称空间中的元素“样式表”http://www.w3.org/1999/XSL/Transform'命名空间中的子元素'character map'无效'http://www.w3.org/1999/XSL/Transform“是的 这是我的XSLT声明 请提供有关如何在XSLT中使用字符映射的帮助。
我的Java应用程序中有多个用户角色。下面是我的代码: 错误: 因此,所发生的情况是,它加载了用户数据的URL访问权限,但当执行最后一行时,它将/dashboard URL更改为具有ADMIN访问权限。我的角色仍然是数据角色,因此不能访问/dashboard URL。 最后一行似乎覆盖了其他行。再来看看URL特权,如果我删除“/dashboard”,那么当涉及到“/data”URL时,我会得到同样
问题内容: 我试图弄清楚@Consumes在这里如何工作。 我有一个如下所示的简化资源,并且我只希望此资源使用“ application / vnd.myApp + xml”。 我有以下测试用例: 从上面的3个测试中,#2和#3按预期工作。 至于#1,如果我没有设置content-type,为什么它也不会抛出415? 问题答案: 基于@Consumes api(http://jsr311.java
我似乎对JFreeChart XYPlot中的测试注释有问题。我可以如下设置文本注释 我还可以通过添加 但是如果我试图改变字体类型/大小或颜色,它似乎不起作用 字体保持黑色,并为默认类型/大小。奇怪的是,在烛台图表上,功能似乎很好,但不是简单的绘图 其他人有没有经历过这种情况,或者我做错了什么? ======== 我似乎已经解决了这个问题。在我的烛台图表代码中,数据集在构建时添加到图表中。添加文本