Tag: api

保护Web-API访问

我有一个简单的Web-API可通过HTTP访问,其中一些相应的移动应用程序可以读取该数据。 现在有人反编译了一个应用程序/嗅探了HTTP流量,得到了我的Web API的URL并构建了自己的客户端,就像我的一样。 如何仅为我自己的客户保护对API的访问? 即使想到有人反编译我的应用程序。 服务器和客户端代码更改是一个选项!

如何防止Web服务API中的并发?

我们有三个Web服务( /a , /b , /c ),其中每个服务映射到一个单独的Java类( ClassA , ClassB , ClassC )中的方法( go() )。 只有一个服务应该同时运行(即: /b在/a运行时无法运行)。 但是,由于这是一个REST API,因此无法阻止客户端请求同时运行的服务。 服务器上最好和最简单的方法是什么,以强制服务不同时运行? 更新 :这是一个内部应用程序,我们不会有大的负载,只有一个应用程序服务器。 更新 :这是一个主观问题,因为您可以对影响最终答案的一般应用程序设计提出不同的论点。 当我发现最有趣和最有帮助时,接受了翻译的回答。

使用Java来使用RESTful API

您如何使用Java而不仅仅使用标准软件包来使用RESTful API? 例如:Twitter API。 我知道有很棒的Java库可以访问它,但是你如何从头开始?

在Java中获取XML文件时出现问题

我想在Android应用程序中使用Google的非官方天气API。 我用这个代码: //get the text from the edit text userZip = zipCode.getText().toString(); //create a link using the zip code //TODO sanitize input System.out.println(userZip); link = “http://www.google.com/ig/api?weather=” + userZip; System.out.println(link); //connect to the link URL googleWeatherService = null; try { googleWeatherService = new URL(link); } catch (MalformedURLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } […]

使用CriteriaQuery API进行多态JPA查询

我有以下实体结构: +———–+ +————-+ | User | ————-> | Role | +———–+ +————-+ ^ | +——-+———+ | | +———–+ +———–+ +————+ | Role1 | | Role2 |——–> | SomeEntity | +———–+ +———–+ +————+ 我想得到其Role2具有SomeEntity并具有特定属性值的所有用户的名称。 我需要使用JPA标准API执行此操作。 到目前为止我做的是: CriteriaBuilder cb = … CriteriaQuery query = cb.createQuery(String.class); Root user = query.from(User.class); SetJoin userRolesJoin = user.join(User_.roles); // As you can […]

有限的SortedSet

我正在寻找具有有限数量元素的SortedSet的实现。 因此,如果添加了更多元素,则指定的最大值比较器决定是否添加项目并从集合中删除最后一个项目。 SortedSet t1 = new LimitedSet(3); t1.add(5); t1.add(3); t1.add(1); // [1,3,5] t1.add(2); // [1,2,3] t1.add(9); // [1,2,3] t1.add(0); // [0,1,2] 标准API中是否有一种优雅的方法来实现这一目标? 我写了一个JUnit Test来检查实现: @Test public void testLimitedSortedSet() { final LimitedSortedSet t1 = new LimitedSortedSet(3); t1.add(5); t1.add(3); t1.add(1); System.out.println(t1); // [1,3,5] t1.add(2); System.out.println(t1); // [1,2,3] t1.add(9); System.out.println(t1); // [1,2,3] t1.add(0); System.out.println(t1); // [0,1,2] Assert.assertTrue(3 == […]

GET HTTP请求有效负载

我正在设计一个API,我想知道在GET请求上发送JSON有效负载是否合适? 在这个其他问题的HTTP请求方法的有效载荷 ,我们可以根据这个链接找到: 头部 – 没有定义的身体语义。 GET – 没有定义的正文语义。 PUT – 身体支持。 POST – 支持身体。 DELETE – 没有定义的正文语义。 TRACE – 身体不受支持。 选项 – 支持身体但没有语义(可能在将来)。 这是否意味着我不应该发送带有效负载的GET请求? 这样做有风险吗? 就像让一些HTTP客户端库无法发送这样的有效载荷一样? 或者我的Java API代码无法在某些应用程序服务器上移植? 还要别的吗? 我发现ElasticSearch在GET请求上使用了这样的有效负载: $ curl -XGET ‘http://localhost:9200/twitter/tweet/_search?routing=kimchy’ -d ‘{ “query”: { “filtered” : { “query” : { “query_string” : { “query” : “some query string here” } […]

我的内部API类是否应该都在一个包中?

我正在努力打包API以供公众使用。 因此,我试图限制只暴露于那些我希望公开和可支持的方法。 当然,在这下面有许多有限的访问方法。 麻烦的是我有很多内部代码需要访问这些受限制的方法而不公开这些方法。 这会产生两个问题: 我不能创建接口来在类之间进行通信,因为这会使我的内部方法公开。 我无法访问受保护或默认方法,除非我将大部分内部类放在同一个包中。 因此,我有大约70或80个内部类在干净隔离的包中但是具有过度宽松的访问修饰符。 你会说单个包是两个邪恶中的较小者还是有更好的方法来掩盖我的内部方法,同时保持更细粒度的包? 我有兴趣在这里找到最好的做法。 我已经意识到了这一点

安全性:限制第三方软件的内部访问

我有一个Java应用程序,用户可以在其中加载第三方“插件”以增强用户体验。 存在供这些插件使用的API,但出于安全考虑,应限制第三方软件访问内部应用程序类。 插件的受限制包将是“com.example”,而允许的是“com.example.api”。 API类确实调用内部的混淆类。 在研究了这个之后,我遇到了几种SecurityManager方法: checkMemberAccess(Class,int)和checkPackageAccess (String) ,它们似乎都是我可行的目标。 但是,经过一些测试和进一步研究后,我发现checkMemberAccess仅适用于reflection调用,而checkPackageAccess仅在类加载器调用loadClass时调用。 限制对包的访问的合理方法是什么(com.example,而不是com.example.api)?

匿名上传File对象到Imgur API(JSON)给出了身份validation错误401

我创建了一个类UploadToImgurTask作为AsyncTask,它接受单个文件路径参数,创建并设置MultiPartEntity,然后使用Apache HttpClient上传带有所述实体的图像。 来自Imgur的JSON响应保存在JSONObject中,我在LogCat中显示的内容供我自己理解。 这是我从Imgur收到的JSON的屏幕截图: 我在api.imgur.com上查找了错误状态401,它说我需要使用OAuth进行身份validation, 尽管事实上Imgur已经非常清楚地表明如果图像是匿名上传的,应用程序不需要使用OAuth(这就是我我现在正在做 class UploadToImgurTask extends AsyncTask { String upload_to; @Override protected Boolean doInBackground(String… params) { final String upload_to = “https://api.imgur.com/3/upload.json”; final String API_key = “API_KEY”; final String TAG = “Awais”; HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpPost httpPost = new HttpPost(upload_to); try { final MultipartEntity entity = […]