我正在寻找一种在Jersey中启用基于令牌的身份验证的方法.我试图不使用任何特定的框架.那可能吗?
我的计划是:用户注册我的Web服务,我的Web服务生成令牌,将其发送到客户端,客户端将保留它.然后,对于每个请求,客户端将发送令牌而不是用户名和密码.
我在考虑为每个请求使用自定义过滤器,@PreAuthorize("hasRole('ROLE')")
但我只是认为这会导致很多请求数据库检查令牌是否有效.
或者不创建过滤器并在每个请求中放置一个参数令牌?这样每个API首先检查令牌,然后执行一些东西来检索资源.
在以下情况下,应将哪些响应代码传递给客户端?
我选择了403.我也发现以下我认为可以使用.
维基百科:
412前提条件失败:服务器不满足请求者对请求提出的前提条件之一
如果我应该使用除403以外的代码,建议代码.
我不是在问这里已经问过的问题: @PathParam和@QueryParam之间有什么区别
这是"最佳实践"或惯例问题.
当你使用@PathParam
VS @QueryParam
.
我能想到的是,决定可能是使用二者来区分信息模式.让我在下面说明我的LTPO - 不完美的观察.
PathParam的使用可以保留用于信息类别,这可以很好地落入信息树的分支中.PathParam可用于深入到实体类层次结构.
而QueryParam可以保留用于指定属性以定位类的实例.
例如,
/Vehicle/Car?registration=123
/House/Colonial?region=newengland
/category?instance
@GET
@Path("/employee/{dept}")
Patient getEmployee(@PathParam("dept")Long dept, @QueryParam("id")Long id) ;
Run Code Online (Sandbox Code Playgroud)
VS /category/instance
@GET
@Path("/employee/{dept}/{id}")
Patient getEmployee(@PathParam("dept")Long dept, @PathParam("id")Long id) ;
Run Code Online (Sandbox Code Playgroud)
VS ?category+instance
@GET
@Path("/employee")
Patient getEmployee(@QueryParam("dept")Long dept, @QueryParam("id")Long id) ;
Run Code Online (Sandbox Code Playgroud)
我不认为有这样做的标准惯例.在那儿?但是,我想知道人们如何使用PathParam与QueryParam来区分他们的信息,就像上面举例说明的那样.我也很想听听练习背后的原因.
我正在编写REST Web应用程序(NetBeans 6.9,JAX-RS,TopLink Essentials)并尝试返回JSON 和 HTTP状态代码.我已准备好代码并且在从客户端调用HTTP GET方法时返回JSON.实质上:
@Path("get/id")
@GET
@Produces("application/json")
public M_?? getMachineToUpdate(@PathParam("id") String id) {
// some code to return JSON ...
return myJson;
}
Run Code Online (Sandbox Code Playgroud)
但是,我也想用JSON数据一起返回的HTTP状态代码(500,200,204,等).
我试着用HttpServletResponse
:
response.sendError("error message", 500);
Run Code Online (Sandbox Code Playgroud)
但这使得浏览器认为它是"真正的"500,因此输出网页是一个常规的HTTP 500错误页面.
我想返回一个HTTP状态代码,以便我的客户端JavaScript可以根据它处理一些逻辑(例如在HTML页面上显示错误代码和消息).这是可能的还是HTTP状态代码不能用于此类事情?
我正在使用Jersey学习JAX-RS(又名JSR-311).我已经成功创建了一个Root资源并正在使用参数:
@Path("/hello")
public class HelloWorldResource {
@GET
@Produces("text/html")
public String get(
@QueryParam("name") String name,
@QueryParam("birthDate") Date birthDate) {
// Return a greeting with the name and age
}
}
Run Code Online (Sandbox Code Playgroud)
这很好用,并处理当前语言环境中的任何格式,日期(字符串)构造函数(如YYYY/mm/dd和mm/dd/YYYY)可以理解这种格式.但是,如果我提供的值无效或无法理解,我会得到404响应.
例如:
GET /hello?name=Mark&birthDate=X
404 Not Found
Run Code Online (Sandbox Code Playgroud)
我该如何自定义此行为?也许是一个不同的响应代码(可能是"400 Bad Request")?记录错误怎么样?也许在自定义标题中添加问题描述("错误日期格式")以帮助排除故障?或者返回包含详细信息的完整错误响应以及5xx状态代码?
我想知道是否在我的URL中使用矩阵或查询参数.我发现对该主题的旧讨论并不令人满意.
例子
乍一看,矩阵参数似乎只有优势:
paramA=val1,val2
但也有缺点:
由于服务的开发人员可以选择支持矩阵参数的框架,因此唯一的缺点是浏览器默认创建查询参数.
还有其他缺点吗?你会怎么做?
我的POST方法如下所示:
@POST
@Consumes({"application/json"})
@Path("create/")
public void create(String param1, String param2){
System.out.println("param1 = " + param1);
System.out.println("param2 = " + param2);
}
Run Code Online (Sandbox Code Playgroud)
当我在Netbeans中创建Jersey客户端时,调用post方法的方法如下所示:
public void create(Object requestEntity){
webResource.path("create").type(MediaType.APPLICATION_JSON).post(requestEntity);
}
Run Code Online (Sandbox Code Playgroud)
运行此测试时:
@Test
public void hello(){
String json = "{param1=\"hello\",param2=\"hello2\"}";
this.client.create(json);
}
Run Code Online (Sandbox Code Playgroud)
它在服务器中提供以下输出:
INFO: param1 = {param1="hello",param2="hello2"}
INFO: param2 =
Run Code Online (Sandbox Code Playgroud)
我需要更改什么才能使参数给出正确的值?
我混淆了JAX-RS之间的区别(好吧,也许应该使用Jersey进行比较,因为JAX-RS只是规范)和Spring for Restful服务.我试图在网上搜索更多信息,它变得更加混乱.我的公司正在使用Spring MVC来开发Restful API
令人困惑的部分是,JAX-RS代表用于RESTful Web服务的Java API,在Spring中我也使用java来开发RESTful Web服务,所以我实际上并没有得到差异.Spring是否遵循JAX-RS规范?
据我所知,直到现在:
对于java.util.Date,当我这样做
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy")
private Date dateOfBirth;
Run Code Online (Sandbox Code Playgroud)
然后在我发送的JSON请求中
{ {"dateOfBirth":"01/01/2000"} }
Run Code Online (Sandbox Code Playgroud)
有用.
我应该如何为Java 8的LocalDate字段执行此操作?
我试过了
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
private LocalDate dateOfBirth;
Run Code Online (Sandbox Code Playgroud)
它没用.
有人可以让我知道这是正确的方法吗?
以下是依赖项
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>jaxrs-api</artifactId>
<version>3.0.9.Final</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>com.wordnik</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.3.10</version>
</dependency>
Run Code Online (Sandbox Code Playgroud) 我正在使用Jersey实现一个主要检索和提供JSON编码数据的RESTful API.但我有一些情况需要完成以下事项:
我有一个基于JQuery的单页Web客户端,它可以为这个Web服务创建AJAX调用.目前,它不进行表单提交,并使用GET和POST(使用JSON对象).我应该使用表单发送数据和附加的二进制文件,还是可以使用JSON plus二进制文件创建多部分请求?
我的应用程序的服务层当前在生成PDF文件时创建ByteArrayOutputStream.通过Jersey将此流输出到客户端的最佳方法是什么?我已经创建了一个MessageBodyWriter,但我不知道如何从Jersey资源中使用它.这是正确的方法吗?
我一直在查看泽西岛附带的样本,但还没有找到任何说明如何做这些事情的东西.如果重要的是,我正在使用泽西与杰克逊做没有XML步骤的对象 - > JSON,并没有真正使用JAX-RS.
jax-rs ×10
java ×7
rest ×7
jersey ×4
http ×2
jackson ×1
jersey-2.0 ×1
json ×1
parameters ×1
resteasy ×1
spring-mvc ×1
url ×1
web-services ×1