阅读更多

0顶
0踩

编程语言

原创新闻 使用Java API的5个技巧

2017-09-21 11:03 by 副主编 jihong10102006 评论(1) 有19360人浏览
引用
原文:5 Tips for Building Your Java API
作者:Brian Demers
译者:Jackyrong

本文介绍了一些关于Java API安全和性能方面的简单易用的技巧,其中包括保证API Key安全和开发Web Service方面中在框架方面选择的一些建议。

程序员都喜欢使用API!例如为app应用构建API或作为微服务架构体系的一部分。当然,使用API的前提是能让你的工作变得更轻松。为了简化开发和提高工作效率所作出的努力,有时也意味着需要寻找新的类库或者过程(或者减少过程)。对于很多开发团队来说,对于其APP和API进行管理认证和访问控制要耗费很多的时间,因此我们需想分享一些技巧,它们能节约你的时间,减少代码编写量,并能让你的应用更加安全和易于维护。 

先介绍下本文提及的背景知识:Okta是一个基于REST、JSON API构建的Java应用,使用Spring框架构建。我们公司的应用,是保存用户的身份凭证和其他公司的敏感数据,所以对我们来说,安全是最重要的。因此,我对这些技巧的第一个要求是,它们能帮助令到你的Java应用更安全。

这些建议应该是任何类型的Java应用都是通用的。它们会帮助你更快地编写代码,但代码量更少了,同时又更安全:这真的是三赢的结果! 

1. 不要自己去实现安全框架

说真的,不要尝试自己去实现安全方面的代码,这太难了。

几乎每个人都知道避免去实现加密等算法。同样道理,你的应用的安全栈的其余部分也是一样,可能需要花费很大,得到的风险也很大。你很可能会犯一些错误。自1999年以来,已经有89373个CVE(公共漏洞和暴露)发布了。而其中公开的大部分的发现者都是那些非常聪明的人。

你可能认为处理一个简单的用例(例如验证用户的密码)是很简单的事情——你所做的一切只是比较一对字符串。这样想就错了。你需要验证密码的哈希值,审核尝试登录的次数,减少针对字典的攻击,这只是冰山一角。你最好的选择是使用现有的成熟的库或框架,例如Apache的Shiro或者SpringSecurity,让这些框架去处理各类复杂的安全问题。

2. Use TLS, Always! 永远使用TLS!
 
现在已经是2017年了,所有的网站都应该使用HTTPS了,甚至是公司的内网。Let’s encrypt 让HTTPS变得轻松和简单,这意味着你能不再使用不安全的自签密钥了!你甚至可以在本地设置带证书认证的Tomcat或者Nginx实例。

能让你的应用需要TLS(HTTPS/SSL)只需要简单的一行代码,所有人都应该这样做!如果使用Apache Shiro框架,只需要设置属性:
[urls]/** = ssl

如果使用Spring Security,,只需要在设置HttpSecurity时,简单调用一个方法即可。
http.requiresChannel()
.anyRequest().requiresSecure();

在Spring Boot中,仅需设置一些属性,如下:
server.port=8443
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password=secret
server.ssl.key-password=another-secret

3. 使用Spring Boot创建Web Service

Spring Boot是Spring平台的一个简化,能让编写Spring应用变得很简单,例如能用很少的代码,编写《app应用中考虑的12个因素》一文中提到的观点。如果你还在使用建War包的方式编码,那么Spring Boot值得你去学习。使用Spring Boot可以复杂的、不同类型的应用,例如可以使用简单的注解(@EnableResourceServer)就搭建一个OAuth资源服务器,或者通过简单的属性改变其端口:
server.port = 8090

如果不喜欢使用SpringBoot,那么可以使用Dropwizard去搭建JAX-RS技术栈。

4. 监视应用和性能指标

如果无任何数据的情况下是很难发现程序的错误的。Spring Boot通过使用Actuator,能让收集指标数据变得容易,只需要在应用中增加一个依赖,如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>`

然后就可以通过浏览器中,在访问应用地址后输入/health 或者/metrics去检查应用的健康情况或者指标。Dropwizard框架通过/healthcheck和/metrics实现同样的功能。

下面是Spring Boot应用通过/metrics 输出的结果:
   
{
    "classes": 7704,
    "classes.loaded": 7704,
    "classes.unloaded": 0,
    "counter.status.200.metrics": 1,
    "gauge.response.metrics": 99.0,
    "gc.ps_marksweep.count": 2,
    "gc.ps_marksweep.time": 272,
    "gc.ps_scavenge.count": 8,
    "gc.ps_scavenge.time": 136,
    "heap": 3728384,
    "heap.committed": 470016,
    "heap.init": 262144,
    "heap.used": 207793,
    "httpsessions.active": 0,
    "httpsessions.max": -1,
    "instance.uptime": 25020,
    "mem": 529086,
    "mem.free": 262222,
    "nonheap": 0,
    "nonheap.committed": 60608,
    "nonheap.init": 2496,
    "nonheap.used": 59067,
    "processors": 8,
    "systemload.average": 5.56103515625,
    "threads": 24,
    "threads.daemon": 22,
    "threads.peak": 28,
    "threads.totalStarted": 32,
    "uptime": 37182}

5. 保护敏感信息

人们都认为API密钥是不安全的,这是事实。密钥通过电子邮件发送或源代码管理系统控制。也许这是它们看起来比密码更不安全的原因,但它们也一样敏感。如果需要将API密钥存储在文件中,请确保授予文件有限的访问权限。例如,我们建议在私人目录

中存放Okta的YAML文件并且赋予文件所有者只读权限。
$ chmod u=r,go-rwx ~/.okta/okta.yaml

如果你正为使用你的APP的用户创建API,记得提醒他们,如果无设置好权限的话,.SSH的忽文件是放在你的~/.ssh目录下,如果无设置好权限的话。GitHub 把它们放在“危险区域”,以提醒用户,这是十分有用的。
  • 大小: 94.1 KB
0
0
评论 共 1 条 请登录后发表评论
1 楼 jjc132 2017-09-27 08:42
还不错,

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 5个Java API使用技巧

    主要为大家详细介绍了Java API安全和性能方面的简单易用技巧,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  • Java8 Stream API 详细使用方法与操作技巧指南

    主要介绍了Java8 Stream API 详细使用方法与操作技巧,总结分析了Java8 Stream API 基本功能、使用方法与操作注意事项,需要的朋友可以参考下

  • 新手小白学JAVA API手册使用方式说明

    API手册使用方式 其实我们在API阶段,更多是要去学习别人已有内容,比如方法的使用 但是这么多的方法对于新手来说其实是不太友好的,刚开始根本记不住呀 所以API手册就是我们的一个好帮手,我们可以在API手册查到目标...

  • 每个 Java 工程师都必须知道的五个 API 性能优化技巧

    作为后端开发人员,我们总是在编写各种 API,无论是为前端 Web 提供数据支持的HTTP REST API ,还是提供内部使用的 RPC API。这些 API 在服务初期可能表现不错,但随着用户数量的增长,一开始响应很快的API变得...

  • JAVA EXCEL API小技巧.docx

    。。。

  • JAVA EXCEL API小技巧.pdf

    。。。

  • Java API文档的阅读技巧

    1、Api文档的阅读技巧,先读主干,了解功能,在看枝叶,英文也是如此 2、java&nbsp;api文档再使用的时候,尽量少的使...

  • Java 常用API的运用,效率及技巧

    Java 常用API的运用,效率及技巧 Java面向对象基本概念 2. System 3. String, StringBuffer 4. 数值,字符,布尔对象与简单类型的操作 5. Class, ClassLoader 6. Java IO系统 7. Java集合类 8. ResourceBundle, ...

  • Java SE API技巧.pdf

    ——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!

  • 小技巧:如何使用Java API从Maven仓库下载Maven Artifact

    最近在开发中遇到需要从Maven仓库下载Maven Artifact(GAV)的场景,遂有此篇小文。 目的 可以在应用程序中根据Maven坐标...Eclipse 的Aether项目(Wiki)能够满足这个需求,不止于此,它还能同时下载某个GAV的所有...

  • Java8时间和日期API20例Java开发Java经验技

    Java8时间和日期API20例Java开发Java经验技巧共12页.pdf.zip

  • 基于Java的即时通讯工具的设计与开发的毕业设计,使用Java SE和Java Socket API开发基本功能

    在开发阶段,我们将使用Java SE和Java Socket API开发基本功能,使用Java Swing开发用户界面。主要的开发任务包括: 1. 服务器端的设计和实现 2. 客户端的设计和实现 3. 用户登录和注册功能的实现 4. 好友列表和...

  • 23个最有用的ES检索技巧(Java API实现)

    本文是对 23个最有用的Elasticseaerch检索技巧 一文提到的ES检索技巧进行 Java API 的简单实现,但仅限于简单实现,并不考虑包括参数校验,异常处理,日志处理,安全等问题,仅供参考 代码见 UsefullESSearchSkill ...

  • Elasticsearch Java API的基本使用大全

    在明确了ES的基本概念和使用方法后,我们来学习如何使用ES的Java API. 本文假设你已经对ES的基本概念已经有了一个比较全面的认识。 客户端 你可以用Java客户端做很多事情: 执行标准的index,get,delete,update,...

  • hdfs的java API开发

    所以我们默认去maven的仓库下载不到,需要自己手动的添加repository去CDH仓库进行下载,以下两个地址是官方文档说明,请仔细查阅。windows中,各版本的hadoop的winutils https://github.com/cdarlint/winutils。:...

  • 如何快速掌握官方提供的java API文档使用技巧

    在线API文档的具体使用方法如下: 1、打开浏览器(任何一个浏览器都可以) 2、在搜索框输入java api,单击“百度一下”进行搜索 3、搜索完成后,鼠标下滑就能看到“在线API文档”字样了,单击超链接即可进入...

  • JAVA常用API精品课程

    课程目标:1、让初学者从小白开始,善于运用知识点,解脱学习的苦恼2、能够学习更多的工作中使用技巧,成为编程高手

  • 【自然语言处理(NLP)】机器翻译之数据处理(数据收集、数据清洗、数据分词、数据标注、数据划分)

    【自然语言处理(NLP)】机器翻译之数据处理(数据收集、数据清洗、数据分词、数据标注、数据划分)

  • fence-agents-rhevm-4.2.1-41.el7-9.6.x64-86.rpm.tar.gz

    1、文件内容:fence-agents-rhevm-4.2.1-41.el7_9.6.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/fence-agents-rhevm-4.2.1-41.el7_9.6.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

Global site tag (gtag.js) - Google Analytics