小编Mar*_*ton的帖子

Ajax身份验证,不允许浏览器弹出登录对话框

我正在设计一个RESTful Web服务(JBoss + RESTeasy).UI程序员正在编写一个将使用它的Ajax Web应用程序.Web应用程序将是一个HTML页面,其中所有内容都使用JavaScript完成.为安全起见,所有流量都通过SSL.

目前我正在使用基本身份验证.UI程序员可以显示一个对话框来获取用户名和密码,并在标题中添加"Authorization:Basic xxxxx".不幸的是,如果密码错误,会出现丑陋的浏览器登录对话框.此外,用户无法注销.这是无法接受的.

在我们将使用的任何浏览器中似乎都无法拦截对XMLHttpRequest的401响应.

基于表单的身份验证对我们不起作用.我们需要在一段时间不活动(相当于会话超时)后自动注销.当客户端需要JSON对象时,我们不能让服务器突然返回登录页面.

JBoss提供四种身份验证策略:BASIC,FORM,CLIENT-CERT和DIGEST.我认为DIGEST与BASIC有同样的问题.这四个都不是我们想要的.

此Web应用程序将是唯一的客户端(目前),因此不需要使用BASIC.我可以安装其他任何身份验证策略吗?例如,我可以使用WSSE UsernameToken的实现吗?(如在O'Reilly的REST Web服务本书的第8章描述.)服务器将在WWW身份验证标头中发送"WSSE",而不是"基本"和大概的浏览器会忽略它和权利,通过它传递.

我想配置它所属的安全性 - 在JBoss配置文件中,而不是在我的RESTful Web服务中 - 所以我正在寻找一个可以插入JBoss的实现.

authentication ajax rest

6
推荐指数
1
解决办法
3641
查看次数

将某些类的Java Collection转换为String的Collection

假设一个类(例如URI)可以使用构造函数和toString()方法转换为String或从String转换.

我有一个ArrayList<URI>,我想把它复制到一个ArrayList<String>,或者反过来.

Java标准库中是否有实用程序功能可以执行此操作?就像是:

java.util.collections.copy(urlArray,stringArray);

我知道有实用程序库提供该功能,但我不想添加不必要的库.

我也知道如何编写这样的函数,但是阅读代码并发现有人编写了标准库中已存在的函数,这很烦人.

java collections

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

用于RESTful API的Mimetypes

http://kenai.com/projects/suncloudapis/pages/Home上的Sun Cloud API 是RESTful API的一个很好的示例.忠实于RESTful原则,当您获取资源时,您获得的资源不会少于或少于该资源的表示.

响应中的Content-Type标头可以准确地告诉您该资源的类型,例如application/vnd.com.sun.cloud.Snapshot + json.Sun已将这些mimetypes注册到IANA.

目前这一般有多实用?我见过的大多数API都使用了"application/json"的Content-Type.这告诉你响应是JSON,但没有更多关于它.你必须在JSON对象中有一些东西,比如"type"属性,才能知道它是什么.

我正在设计一个RESTful API(不会公开,因此我不会注册mimetypes).我一直在使用RESTEasy,我发现即使我指定了一个完整的mimetype,响应头中的Content-Type也将是Accept请求头指定的内容.如果请求默认请求"application/*+ json",则响应头将具有"application/*+ json".我可以通过在响应消失之前更改标题来解决这个问题,但是我应该尝试这样做吗?或者响应是否应该像请求那样具有通配符?

或者我应该像大多数API似乎一样提供"application/json"?

后来添加的其他想法:

陈述问题的另一种方法是:我应该使用HTTP作为协议,还是应该仅使用HTTP作为传输机制来包装我自己的协议?

要使用HTTP作为协议,响应的实体主体包含所请求对象的表示(或错误消息对象的表示),"Content-Type"标头包含对象的确切类型,以及"状态" "标头包含成功或错误代码.

要将HTTP仅用作传输机制,"Status"标头始终设置为200 OK,"Content-Type"是通用的,如"application/json",实体主体包含自身具有对象的内容,对象类型,错误代码以及您想要的任何其他内容.如果您自己的协议是RESTful,那么整个方案就是RESTful.(HTTP是RESTful协议,但不是唯一可能的协议.)

您自己的协议对所有传输层都是不透明的.如果您使用HTTP作为协议,所有传输层都将理解它并可能做您不想要的事情; 例如,浏览器将拦截"401 Unauthorized"响应并建立登录对话框,即使您想自己处理它.

rest json mime-types

5
推荐指数
1
解决办法
1787
查看次数

坚持我的REST枪或打破无国籍?建议需要

我编写了一个RESTful servlet,UI开发人员想要在服务器上保存登录状态.

他提出了这个奇怪的说法:"我没有遇到过纯REST的生产REST实现.我见过的所有实现都让服务器维持会话."

我发现这很难接受.首先是技术性,那里有很多普通的HTTP页面,都是纯粹的RESTful.其次,是的,有非RESTful实现标记为RESTful,就像黄铜标记为"黄金"一样.第三,仅仅因为其他人从桥上跳下来并不意味着我应该.

背景:这是一个使用HTTPS和基本身份验证的JavaScript Ajax Web应用程序.为避免通常(不可自定义的)浏览器登录弹出框,应用程序会显示一个登录屏幕,其中包含产品徽标和名称和密码的文本框.名称和密码存储在文档中,并在每个请求的Authorization标头中发送.如果刷新页面,则名称和密码将丢失,用户必须再次输入.这被认为是一个错误; UI开发人员希望能够再次按下刷新按钮而不再提供密码.

因此开发人员想要使用cookie或JSP会话.Abby,最终每个REST实现都在服务器上维护应用程序状态吗?或者有没有办法解决这个问题,仍然保持我的RESTful纯度?

cookies ajax rest session stateless

5
推荐指数
1
解决办法
696
查看次数

Dojo DOH怎么了?

Dojo Toolkit过去常常带有一个名为"Doh"的测试工具.它位于/ utils目录中.

现在当你下载dojo-release-1.3.2时,无法找到/ utils目录.

Doh已经死了吗?

dojo unit-testing doh

4
推荐指数
1
解决办法
1085
查看次数

除子资源之外的RESTEasy JAX-RS动态调度

RESTEasy(JAX-RS)允许通过子资源进行动态调度.例如:

POST /customers/create
{"name":"Smith","country":"jp"}
Run Code Online (Sandbox Code Playgroud)

我们可以使用根资源来处理路径"/ customers",其方法是使用没有HTTP方法但使用@Path("/ create")注释的方法.此方法返回JAX-RS查看的资源以继续处理请求.但是,此资源必须处理"/ customers/create"路径.

我有一个现有的情况,可以创建不同类型的实体:

POST /customers/create
{"name":"Smith"}

POST /locations/create
{"name":"Chicago"}
Run Code Online (Sandbox Code Playgroud)

我想基于请求正文中的附加属性添加创建任何类型实体的功能:

POST /entities/create
{"type":"customer","name":"Smith"}
Run Code Online (Sandbox Code Playgroud)

本质上,我想将请求转发到处理"POST/customers/create"的代码.我可以编写为"POST/entities/create"调用的子资源定位器并返回Customer资源,但是JAX-RS无法调度请求,因为Customer资源不处理路径"/ entities/create".有没有办法在转发请求时将URL更改为/ customers/create?

此时我无法更改API以使"客户"成为"实体"的真正子资源.

jax-rs resteasy

4
推荐指数
1
解决办法
1292
查看次数

Java catch块使用静态绑定?

假设InvalidResourceException是ResourceException的子类.定义两种方法:

void handleException(ResourceException e) {
  System.out.println("ResourceException " + e.toString());
}
void handleException(InvalidResourceException e) {
  System.out.println("InvalidResourceException " + e.toString());
}
Run Code Online (Sandbox Code Playgroud)

现在以下代码:

try {
  throw new InvalidResourceException("invalid resource");
} catch (ResourceException e) {
  handleException(e);
}
Run Code Online (Sandbox Code Playgroud)

打印这个:

ResourceException: com.myPackage.InvalidResourceException: invalid resource
Run Code Online (Sandbox Code Playgroud)

但是以下代码:

   try {
     throw new InvalidResourceException("invalid resource");
   } catch (InvalidResourceException e) {
     handleException(e);
   } catch (ResourceException e) {
     handleException(e);
   }
Run Code Online (Sandbox Code Playgroud)

打印这个:

InvalidResourceException:  com.myPackage.InvalidResourceException: invalid resource
Run Code Online (Sandbox Code Playgroud)

这是Sun的JDK 1.5.0_15.

这与Java标准一致吗?

这段代码应该怎么做?

Exception e = new InvalidResourceException("invalid resource");
handleException(e);
Run Code Online (Sandbox Code Playgroud)

这段代码应该怎么做?

Exception e = new InvalidResourceException("invalid …
Run Code Online (Sandbox Code Playgroud)

java instanceof

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

iPhone应用可以调用另一个应用吗?

示例:iPhone中的"联系人"不会将联系人组织到组(邮件列表)中.您可以编写一个在手机上维护数据库的应用程序.团体可以是"同事","派对朋友","亲戚"等.

从另一个应用程序,很高兴打电话给这个应用程序.

想象一下名为"TellMyFriends"的应用程序.此应用程序可以召唤照片库选择照片,或相机拍摄新照片.(您可以使用iPhone SDK执行此操作.)

现在您要将照片发送给"派对朋友".您想召唤具有组数据库的第二个应用程序.选择"派对朋友"组,然后返回第一个应用随后可在手机通讯录中找到的姓名列表.可以这样做吗?

iphone

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