小编cas*_*lin的帖子

REST API中基于令牌的身份验证

我尝试实现基于令牌的身份验证方法:

  1. 每次成功登录都会创建新令牌.

  2. 如果用户选择"保持登录状态"或用户正在使用移动设备,则令牌将保留在Redis数据库中,而不会过期.否则,令牌将在20分钟后到期.

  3. 对用户进行身份验证后,将从Redis数据库中的每个后续请求中检查令牌.

我想知道如何识别设备.对于移动设备,我可以使用设备标识符.但是如何识别浏览器呢?

示例:用户使用Chrome登录并选择"保持登录状态".使用Redis中的浏览器名称生成并保留令牌.如果用户从Firefox登录,则将令牌和"Firefox"保存在数据库中.我在Redis中保存令牌,而在成功验证时创建令牌.是否可以仅使用令牌和使用令牌的浏览器?或者我是否还需要持久保存IP?

其他问题:如何避免攻击者从cookie中窃取令牌?

security rest spring spring-security resteasy

3
推荐指数
1
解决办法
8846
查看次数

使用 Jersey 设计 API 来启动和停止进程

我正在使用 Java 和 Jersey 开发 REST Web 服务器。这是我的第一个 Web 应用程序,我想确保我很好地构建了该应用程序。我创建了第一个运行良好的函数:

@Path("/startAuto") 
public class Rest {

    @GET
    public String startAuto() {
        try {
            ProcessBuilder pb = new ProcessBuilder("/startAuto.sh");
            Process p = pb.start();     
            p.waitFor();                
            return ("Auto Started");
        } catch (Exception e) {
            e.printStackTrace();
            return ("error");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想添加一个新功能,例如stopAuto.

哪个更干净:在此类中添加函数或创建一个新类?

java jersey

3
推荐指数
1
解决办法
6369
查看次数

如何使用javax.ws.rs执行输入验证?

我正在使用实现REST API javax.ws.rs.实现目标是尽可能安全,因此应验证每个输入.

对于输入验证,我实现一个公共类ValidatingHttpRequest实现HttpServletRequest.

我可以识别出11个甚至被调用的方法,现在所有其他方法都会抛出UnsupportedOperationException.但是,其中一些方法处理REST框架显然使用的内容.例如,我的代码不关心标题,而是getHeaders被调用.通过大量的逆向工程,我将能够找出使用的标头,并且应该进行验证,当然我可以进行验证.可能会引入非最佳行为,也可能是一些错误.并且HTTP请求有一些类似的方面.

但是之前没有人这样做过,可能有人真正了解REST框架是如何工作的?或者是不必要的,因为框架本身不能被愚弄?

所以我正在寻找一个完全验证的HttpServletRequest实现,或者说是为什么在这种情况下没有必要.当然,我将使用实现验证请求正文和参数.

java validation web-services jax-rs

3
推荐指数
1
解决办法
5055
查看次数

Instance#get() 是否为 CDI 中的 @ApplicationScoped beans 返回相同的实例?

如果@ApplicationScoped通过 获取 bean Instance<T>#get(),后续调用是否会get()重用同一实例(我确信ProxyObject使用了相同的实例)?

java cdi

3
推荐指数
1
解决办法
690
查看次数

Upsert(插入/更新)端点的HTTP状态代码

我有一个PUT创建/替换实体的端点,不需要返回Location标头或任何实体主体。

始终返回204(无内容)是否有意义,或者201如果它是一个新实体并且204替换了该实体,应该返回吗?

api rest http-status-codes

3
推荐指数
1
解决办法
615
查看次数

Jackson XML自定义字段解串器

当使用Jackson进行JSON处理时,我扩展了JsonDeserializer<T>并且能够处理自定义反序列化.与杰克逊处理XML有类似的事情吗?

import java.util.List;

public class Something {

    private int iinteger;

    private String sstring;

    private List<String> sarray;

    public Something(int iinteger, String sstring, List<String> sarray) {
        this.iinteger = iinteger;
        this.sstring = sstring;
        this.sarray = sarray;
    }

    public Shit() {
    }

    public int getIinteger() {
        return iinteger;
    }

    public void setIinteger(int iinteger) {
        this.iinteger = iinteger;
    }

    public String getSstring() {
        return sstring;
    }

    public void setSstring(String sstring) {
        this.sstring = sstring;
    }

    public List<String> getSarray() {
        return sarray;
    }

    public …
Run Code Online (Sandbox Code Playgroud)

java xml jackson

2
推荐指数
1
解决办法
2583
查看次数

如何将我的Jersey REST API变成可执行的JAR?

我正在使用Jersey,Maven; 并且可以使用Jetty,Tomcat或J2EE Preview(可嵌入?).

  1. 将REST API作为独立/可执行JAR移植的最简单方法是什么?
  2. 没有Spring Boot我可以做到吗?

rest executable jersey

2
推荐指数
2
解决办法
3635
查看次数

使用javax.ws.rs.core.Response.readEntity从JSON对象中提取字符串列表

如果我的回答如下:

{
  "values": [ "1", "2" ]
}
Run Code Online (Sandbox Code Playgroud)

我应该如何使用readEntity来填充List<String>的价值观:1,2

json jax-rs

2
推荐指数
1
解决办法
3004
查看次数

RESTApi 端点获取多个资源

下面的操作只检索请求中的所有书籍。这显然是一个GET操作。

从你的角度来看,做下面这两个更好(赞成/反对):

  • 笔记:

获取 - api/library/2/books/

从图书馆 2 中检索所有书籍。

  • 使用获取:

GET - api/library/2/books/3/5/10/33/...../pages

  • 使用 POST:

POST - api/library/2/books/pages

身体:

{
    "books_id": [
        2,
        30,
        40,
        20,
        30
    ]
}
Run Code Online (Sandbox Code Playgroud)

我真的很怀疑使用POSTGET方法来实现它。如果要检索 100-200 本书,URL 上的书籍 ID 会变得非常混乱。我想在这里得到一些启示。

我正在使用 PHP 来处理 Rest 应用程序,上面的所有这些方法都是有效的。

rest api-design http

2
推荐指数
1
解决办法
6740
查看次数

如何使用Java从相对URL构建绝对URL?

我有一个相对的url字符串,知道主机和协议.如何构建绝对url字符串?

好像很容易?是的,一开始看,但直到逃脱的角色来.我必须从302代码http(s)响应位置标头构建绝对URL.

让我们考虑一个例子

protocol: http
host: example.com
location: /path/path?param1=param1Data&param2= " 
Run Code Online (Sandbox Code Playgroud)

首先,我尝试构建url字符串,如:

Sting urlString = protocol+host+location
Run Code Online (Sandbox Code Playgroud)

URL类的构造函数不会转义空格和双引号:

new URL(urlString)
Run Code Online (Sandbox Code Playgroud)

URI类的构造函数失败,但异常:

new URI(urlString)
Run Code Online (Sandbox Code Playgroud)

URI.resolve 方法也失败,异常

然后我发现URI可以在查询字符串中转义params,但只有很少的构造函数,例如:

URI uri = new URI("http", "example.com", 
    "/path/path", "param1=param1Data&param2= \"", null);
Run Code Online (Sandbox Code Playgroud)

这个构造函数需要路径和查询是一个单独的参数,但我有一个相对的URL,它不会被路径和查询部分拆分.

我可以考虑检查相对URL是否包含"?" 问题标志,并认为它之前的一切都是路径,并且它之后的一切都是查询,但如果相对网址不包含路径,但只查询,并且查询包含"?",该怎么办?标志?然后这将无效,因为部分查询将被视为路径.

现在我无法从相对URL建立绝对URL.

这些接受的答案似乎错了:

考虑到相对于url与主机和某个路径部分相关的url时的情况可能会很好:

最初的网址http://example.com/...some路径...相对/home?...query here ...

获得java核心解决方案会很棒,尽管它仍然可以使用一个好的lib.

java url http

2
推荐指数
1
解决办法
380
查看次数