这里有新鲜出炉的 Java 并发编程示例,程序狗速度看过来!
Java 程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称.
这篇文章主要为大家详细介绍了 Java API 安全和性能方面的简单易用技巧,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文介绍了一些关于 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 时,简单调用一个方法即可.
在 Spring Boot 中,仅需设置一些属性,如下:
http.requiresChannel()
.anyRequest().requiresSecure();
3. 使用 Spring Boot 创建 Web Service
server.port=8443
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password=secret
server.ssl.key-password=another-secret
Spring Boot 是 Spring 平台的一个简化,能让编写 Spring 应用变得很简单,例如能用很少的代码,编写《app 应用中考虑的 12 个因素》一文中提到的观点.如果你还在使用建 War 包的方式编码,那么 Spring Boot 值得你去学习.使用 Spring Boot 可以复杂的,不同类型的应用,例如可以使用简单的注解(@EnableResourceServer)就搭建一个 OAuth 资源服务器,或者通过简单的属性改变其端口:
server.port = 8090
如果不喜欢使用 SpringBoot, 那么可以使用 Dropwizard 去搭建 JAX-RS 技术栈.
4. 监视应用和性能指标
如果无任何数据的情况下是很难发现程序的错误的.Spring Boot 通过使用 Actuator, 能让收集指标数据变得容易,只需要在应用中增加一个依赖,如下:
然后就可以通过浏览器中,在访问应用地址后输入 / health 或者 / metrics 去检查应用的健康情况或者指标.Dropwizard 框架通过 / healthcheck 和 / metrics 实现同样的功能.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>`
下面是 Spring Boot 应用通过 / metrics 输出的结果:
5. 保护敏感信息
{
"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
}
人们都认为 API 密钥是不安全的,这是事实.密钥通过电子邮件发送或源代码管理系统控制.也许这是它们看起来比密码更不安全的原因,但它们也一样敏感.如果需要将 API 密钥存储在文件中,请确保授予文件有限的访问权限.例如,我们建议在私人目录中存放 Okta 的 YAML 文件并且赋予文件所有者只读权限.
$ chmod u=r,go-rwx ~/.okta/okta.yaml
如果你正为使用你的 APP 的用户创建 API,记得提醒他们,如果无设置好权限的话,.SSH 的忽文件是放在你的~/.ssh 目录下,如果无设置好权限的话.GitHub 把它们放在 "危险区域",以提醒用户,这是十分有用的.
来源: http://www.phperz.com/article/18/0116/352933.html