使用JAX-RS,您可能需要定义一种方法来创建可以通过@context
注入的自定义实体。不幸的是,JAX-RS规范没有说明如何做到这一点,但它的实现却说明了这一点。例如,CXF(与Spring一起工作得很好)可以这样做:
public class AuthenticationContextProvider implements ContextProvider<Authentication> {
public Authentication createContext(Message message) {
return SecurityContextHolder.getContext().getAuthentication();
}
}
然后,您必须注册该提供程序,该提供程序将允许您进行以下操作:
@GET
@Path("/{id}")
@Produces("text/plain")
public String demonstration(@PathParam("id") String id,
@Context UriInfo ui, @Context Authentication auth) {
// ...
你可以用泽西做类似的事情(正如上面链接的问题所指出的),但我不太了解泽西。
我正在开发REST webService,我的一些客户机将使用我的webservices,所以为了识别真正的客户机,我决定给每个真正的客户机一个唯一的应用程序令牌。客户机将对这个令牌进行编码,他们将把这个令牌放在请求头中,我已经在我的REST webservices中配置了一个REST过滤器来验证令牌。我不想使用https。我的问题是,任何人都可以从我的客户端站点获取该令牌,并可以使用我的REST
为了测试,我尝试下面的代码过滤包含用户的url参数,但是它没有在未经授权的情况下中止请求。最重要的是,我需要以这样的方式来实现它,即只有更新和删除需要用各自的用户名和密码来授权。其他我只是不想过滤的东西。我有一个user类,它具有username和password(加密)属性。因此,如果url包含Users/{userID}的PUT或delete方法,我希望它使用特定用户的用户名和密码进行验证。我
如何用Apache CXF实现这一点?
我的代码在这里:代码重新发布是因为我想问一个更直接的问题。如何在未经身份验证的用户和经过身份验证的用户之间切换?我的未经验证的文件似乎已缓存,我使用了以下方法: 在我剩下的api代码之前,它仍然不能工作。谢谢你的帮助 注意:我知道它不起作用,因为我在切换配置/凭据提供程序后立即使用lambda进行调用,并且只有授权用户才能调用此方法。 编辑@behrooziAWS答案: API代码: 完整错误:B
在我的REST应用程序中,我使用了基本身份验证(发送用户密码并在每次请求时登录)。对于某些需要,我使用以下方法获得登录用户: 但是后来我实现了Spring-Security-Oaut2,我使用访问令牌代替密码和登录。现在. getMain()方法返回“匿名用户”。所以我的问题:有没有办法像上面在sping-security-oauth中那样以某种方式获取登录用户? 编辑:我发现我的安全性“拦截ur
面向公共的服务需要api密钥。 “专用”服务只能接受来自群集内部的呼叫,而不能接受外部世界的呼叫。 每个api都标识一个用户,并且用户对象必须可用于rest服务。 在一个JAX-RS应用程序中有什么标准的方法可以做到这一点吗?(我们用的是resteasy。) 我读过关于过滤器、拦截器和基本身份验证的所有内容,但我不清楚什么是最好的方法。