我正在创建一个REST API,并且发现在某些情况下很难选择正确的HTTP状态代码.
假设我期望某个值,当它不存在时,我无法执行某个任务并返回错误.由于缺少值,服务器无法处理请求,但是发送它的客户端,状态良好但不完整.是否最好返回错误4xx或5xx错误?
我将使用ADFS作为身份提供程序(IDP)来实现对Java应用程序的单一登录。通过OneLogin找到了此解决方案SSO,并试用了其示例应用程序。除此之外,还有Shibboleth的另一种解决方案。
我想知道什么是最适合我的情况的解决方案。两者之间,这不是Spring应用程序。
谢谢
我是Web服务的新手。因此,我从一个如下的小程序开始。
它可以在GlassFish服务器中正常运行,但不能在Tomcat中运行(我想在Tomcat上运行)。这是一个简单的程序,仅给出如何运行Web服务应用程序的想法。
FirstRestService.java:
package com.sandy.demo;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/resources")
public class FirstRestService extends Application {
}
Run Code Online (Sandbox Code Playgroud)
员工.java:
package com.sandy.demo;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@Path("/employees")
public class Employees {
@GET
public String getEmployeesNames() {
return "Hello World";
}
}
Run Code Online (Sandbox Code Playgroud)
我已经包含了jsr311-api-1.1.1.jar(JAX-RS API JAR文件)。
我获取了该应用程序的有效WAR文件,并将其部署在GlassFish Server中。然后,我使用URL运行服务器:http://localhost:8080/MyFirstRestApplication/resources/employees。
但是我无法在Tomcat中执行相同的操作。
我正在开发一个简单易用的程序,使用for循环和while循环,并且ArrayIndexOutOfBoundsException发生了.
这是我的代码:
public class ForWhileLoops
{
public static void main(String[] args)
{
int[] mary = new int[30];
for(int a = 0; a < 31; a++)
{
mary[a]= a*3;
}
for(int b = 0; b < 31; b++)
{
System.out.println(mary);
}
int c = 0;
while(c < 31)
{
c++;
System.out.println(c);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是发生的错误:
java.lang.ArrayIndexOutOfBoundsException: 30
at ForWhileLoops.main(ForWhileLoops.java:9)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
Run Code Online (Sandbox Code Playgroud) 我正在关注这个文档,它给出了以下示例:
<servlet>
<servlet-name>SwaggerBootstrap</servlet-name>
<servlet-class>io.swagger.api.util.Bootstrap</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
Run Code Online (Sandbox Code Playgroud)
但是,我找不到在哪里io.swagger.api.util.Bootstrap上课。
我在 Swagger GitHub 存储库中看不到这个,也找不到任何带有这个的 Maven 模块。
我在哪里可以找到这个?
我尝试实现基于令牌的身份验证方法:
每次成功登录都会创建新令牌.
如果用户选择"保持登录状态"或用户正在使用移动设备,则令牌将保留在Redis数据库中,而不会过期.否则,令牌将在20分钟后到期.
对用户进行身份验证后,将从Redis数据库中的每个后续请求中检查令牌.
我想知道如何识别设备.对于移动设备,我可以使用设备标识符.但是如何识别浏览器呢?
示例:用户使用Chrome登录并选择"保持登录状态".使用Redis中的浏览器名称生成并保留令牌.如果用户从Firefox登录,则将令牌和"Firefox"保存在数据库中.我在Redis中保存令牌,而在成功验证时创建令牌.是否可以仅使用令牌和使用令牌的浏览器?或者我是否还需要持久保存IP?
其他问题:如何避免攻击者从cookie中窃取令牌?
我正在使用实现REST API javax.ws.rs.实现目标是尽可能安全,因此应验证每个输入.
对于输入验证,我实现一个公共类ValidatingHttpRequest实现HttpServletRequest.
我可以识别出11个甚至被调用的方法,现在所有其他方法都会抛出UnsupportedOperationException.但是,其中一些方法处理REST框架显然使用的内容.例如,我的代码不关心标题,而是getHeaders被调用.通过大量的逆向工程,我将能够找出使用的标头,并且应该进行验证,当然我可以进行验证.可能会引入非最佳行为,也可能是一些错误.并且HTTP请求有一些类似的方面.
但是之前没有人这样做过,可能有人真正了解REST框架是如何工作的?或者是不必要的,因为框架本身不能被愚弄?
所以我正在寻找一个完全验证的HttpServletRequest实现,或者说是为什么在这种情况下没有必要.当然,我将使用实现验证请求正文和参数.
如果@ApplicationScoped通过 获取 bean Instance<T>#get(),后续调用是否会get()重用同一实例(我确信ProxyObject使用了相同的实例)?
我有一个为用户生成令牌的资源.我想添加可能性选择令牌生成算法.
我无法更改请求结构,但可以添加一些带有算法名称的HTTP标头.我的问题是选择什么标题?请问Accept是否可以接受?
我目前使用Accept-Token-Algorithm标头发送像RS256和的值HS256.
在阅读Kubernetes 文档的API 概念页面时,我对给定的定义有点困惑:
在版本 1.12 中,如果启用了试运行 alpha 功能,则修饰动词(POST、PUT、PATCH 和 DELETE)可以在试运行模式下接受请求。试运行模式有助于通过典型的请求阶段(准入链、验证、合并冲突)评估请求,直到将对象持久保存到存储中。请求的响应正文尽可能接近非空运行响应。系统保证试运行请求不会持久存储或产生任何其他副作用。
因此,从客户端的角度来看,试运行请求应该具有尽可能相同的行为。
这个概念背后的主要思想是什么?它涵盖哪些用例?
java ×5
http ×2
jax-rs ×2
rest ×2
web-services ×2
api ×1
arrays ×1
cdi ×1
for-loop ×1
java-ee ×1
jwt ×1
kubernetes ×1
resteasy ×1
saml ×1
security ×1
servlets ×1
spring ×1
swagger ×1
validation ×1
while-loop ×1