Java 保护RESTful web服务的安全
我正在开发一个restful web服务,稍后将被Android应用程序使用 现在,我正在寻找一种方法来确保对我的资源的访问: 我找到了几种在网上实现的方法,但我不知道哪种方法最合适。Java 保护RESTful web服务的安全,java,android,security,rest,jax-rs,Java,Android,Security,Rest,Jax Rs,我正在开发一个restful web服务,稍后将被Android应用程序使用 现在,我正在寻找一种方法来确保对我的资源的访问: 我找到了几种在网上实现的方法,但我不知道哪种方法最合适。 例如,我发现Oauth规范对于第三方应用程序更方便,但我的情况并非如此 那么,保护jersey API的最合适的方法是什么呢?如果有人能为我提供有关这方面的教程/文档,我将非常高兴 我使用的是GlassFishV4服务器和Jersey JAX-RS实现 最简单的方法是使用Java EE内置容器管理的安全模型来
例如,我发现Oauth规范对于第三方应用程序更方便,但我的情况并非如此 那么,保护jersey API的最合适的方法是什么呢?如果有人能为我提供有关这方面的教程/文档,我将非常高兴
- 我使用的是GlassFishV4服务器和Jersey JAX-RS实现
在Android应用程序中,可以实现令牌的安全存储。在查看了不同的选项后,我使用了身份验证过滤器和基本身份验证。非常容易实现 一些示例代码: 你需要一个过滤器
public class AuthFilter implements ResourceFilter, ContainerRequestFilter {
...
}
以及安全上下文:
public class MySecurityContext implements SecurityContext {
...
}
和一个用户类:
public class User implements Serializable, Principal {
...
}
最后,您可以添加所需的过滤器,如下所示:(将ResourceConfig对象传递到此函数)
顺便说一句,您可以添加@Context-SecurityContext-SecurityContext代码>到您的资源类或单个方法,以实现更细粒度的访问控制。SecurityContext将被注入到资源的上下文中,因此您可以使用
通过此设置,您可以使用@PermitAll
、@RolesAllowed
等注释REST方法,这使您能够很好地控制RESTful界面
我刚刚用Jersey完成了无状态(无会话)用户身份验证和管理。
如果您想要一个完整的示例,或者您想自己试一试,请告诉我;) 通常,您的应用程序需要某种形式的身份验证,可能是通过直接或使用oauth对用户进行身份验证。您的身份验证也可以是api密钥。您只需要找到一种方法将密钥传输到适合您的用例的应用程序。这是一个很好的问题,我之前问过同样的问题,但还没有得到适当的答案……您是在寻找基于用户的身份验证还是所有安卓客户端都会共享的共享令牌?身份验证是否适用于所有端点(资源/URL)?参考这个
private void prepareFilters(ResourceConfig rc) {
rc.getProperties().put("com.sun.jersey.spi.container.ContainerRequestFilters",
getClassListing(new Class[]{
AuthFilter.class
}));
rc.getProperties().put("com.sun.jersey.spi.container.ContainerResponseFilters",
getClassListing(new Class[]{
CORSFilter.class, //You might not need this
GZIPContentEncodingFilter.class //You might not need this
}));
rc.getProperties().put("com.sun.jersey.spi.container.ResourceFilters",
getClassListing(new Class[]{
RolesAllowedResourceFilterFactory.class
}));
}