我尝试实现基于令牌的身份验证方法:
每次成功登录都会创建新令牌.
如果用户选择"保持登录状态"或用户正在使用移动设备,则令牌将保留在Redis数据库中,而不会过期.否则,令牌将在20分钟后到期.
对用户进行身份验证后,将从Redis数据库中的每个后续请求中检查令牌.
我想知道如何识别设备.对于移动设备,我可以使用设备标识符.但是如何识别浏览器呢?
示例:用户使用Chrome登录并选择"保持登录状态".使用Redis中的浏览器名称生成并保留令牌.如果用户从Firefox登录,则将令牌和"Firefox"保存在数据库中.我在Redis中保存令牌,而在成功验证时创建令牌.是否可以仅使用令牌和使用令牌的浏览器?或者我是否还需要持久保存IP?
其他问题:如何避免攻击者从cookie中窃取令牌?
我正在使用 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.
哪个更干净:在此类中添加函数或创建一个新类?
我正在使用实现REST API javax.ws.rs.实现目标是尽可能安全,因此应验证每个输入.
对于输入验证,我实现一个公共类ValidatingHttpRequest实现HttpServletRequest.
我可以识别出11个甚至被调用的方法,现在所有其他方法都会抛出UnsupportedOperationException.但是,其中一些方法处理REST框架显然使用的内容.例如,我的代码不关心标题,而是getHeaders被调用.通过大量的逆向工程,我将能够找出使用的标头,并且应该进行验证,当然我可以进行验证.可能会引入非最佳行为,也可能是一些错误.并且HTTP请求有一些类似的方面.
但是之前没有人这样做过,可能有人真正了解REST框架是如何工作的?或者是不必要的,因为框架本身不能被愚弄?
所以我正在寻找一个完全验证的HttpServletRequest实现,或者说是为什么在这种情况下没有必要.当然,我将使用实现验证请求正文和参数.
如果@ApplicationScoped通过 获取 bean Instance<T>#get(),后续调用是否会get()重用同一实例(我确信ProxyObject使用了相同的实例)?
我有一个PUT创建/替换实体的端点,不需要返回Location标头或任何实体主体。
始终返回204(无内容)是否有意义,或者201如果它是一个新实体并且204替换了该实体,应该返回吗?
当使用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) 我正在使用Jersey,Maven; 并且可以使用Jetty,Tomcat或J2EE Preview(可嵌入?).
如果我的回答如下:
{
"values": [ "1", "2" ]
}
Run Code Online (Sandbox Code Playgroud)
我应该如何使用readEntity来填充List<String>的价值观:1,2?
下面的操作只检索请求中的所有书籍。这显然是一个GET操作。
从你的角度来看,做下面这两个更好(赞成/反对):
获取 - api/library/2/books/
从图书馆 2 中检索所有书籍。
GET - api/library/2/books/3/5/10/33/...../pages
POST - api/library/2/books/pages
身体:
{
"books_id": [
2,
30,
40,
20,
30
]
}
Run Code Online (Sandbox Code Playgroud)
我真的很怀疑使用POST或GET方法来实现它。如果要检索 100-200 本书,URL 上的书籍 ID 会变得非常混乱。我想在这里得到一些启示。
我正在使用 PHP 来处理 Rest 应用程序,上面的所有这些方法都是有效的。
我有一个相对的url字符串,知道主机和协议.如何构建绝对url字符串?
好像很容易?是的,一开始看,但直到逃脱的角色来.我必须从302代码http(s)响应位置标头构建绝对URL.
让我们考虑一个例子
protocol: http
host: example.com
location: /path/path?param1=param1Data¶m2= "
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¶m2= \"", null);
Run Code Online (Sandbox Code Playgroud)
这个构造函数需要路径和查询是一个单独的参数,但我有一个相对的URL,它不会被路径和查询部分拆分.
我可以考虑检查相对URL是否包含"?" 问题标志,并认为它之前的一切都是路径,并且它之后的一切都是查询,但如果相对网址不包含路径,但只查询,并且查询包含"?",该怎么办?标志?然后这将无效,因为部分查询将被视为路径.
现在我无法从相对URL建立绝对URL.
这些接受的答案似乎错了:
考虑到相对于url与主机和某个路径部分相关的url时的情况可能会很好:
最初的网址http://example.com/...some路径...相对/home?...query here ...
获得java核心解决方案会很棒,尽管它仍然可以使用一个好的lib.
java ×5
rest ×4
http ×2
jax-rs ×2
jersey ×2
api ×1
api-design ×1
cdi ×1
executable ×1
jackson ×1
json ×1
resteasy ×1
security ×1
spring ×1
url ×1
validation ×1
web-services ×1
xml ×1