网站首页 > java教程 正文
什么是Java API?
Java API是Java Application Interface的简称,它是JAVA的应用编程接口,作为Sun开发的Java程序,用于Java编程人员使用的程序接口,并不是说使用Java和接口有关,而是表示Java所提供的现成的类库,供编程人员使用。这与 Win32 中的 dll 文件有点像,封装了好多函数,只暴露也函数名、参数等信息,不提供具体实体,暴露出来的这些就称为API了。也就是说 Java 也是封装了好多的方法,提供了些方法名和参数等信息,便于别人使用啊。
JAVA API文档提供了很多官方的介绍和类、方法、变量的解释。一般很系统,涉及所有的方面,如果开发人员对正在使用的类不熟悉,想查看类里面的变量或者方法,就可以打开JavaAPI文档进行阅读和查看。很多开发语言都提供了官方的文档,可以让开发人员迅速地提高能力。
Java API作用
Java API在Java安全性模型方面也有贡献。当Java API的方法进行任何有潜在危险的操作(比如进行本地磁盘写操作)之前,都会通过查询访问控制器来检验是否得到了授权。访问控制器是一个类,该类用来执行栈检验,以决定是否允许某种操作。
使用Java API的5个技巧
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 把它们放在“危险区域”,以提醒用户,这是十分有用的。
——————————————————————
代码签名证书是保护开发者的劳动成果,给自己开发的软件签名的证书,保证代码在签名之后不被恶意篡改。用户可通过对代码的数字签名来标识软件来源,辨别软件开发者的真实身份。数安时代(GDCA)的代码签名证书支持多种代码签名,已通过WEBTRUST国际认证。
文章材料来源于互联网
猜你喜欢
- 2024-10-14 Java API接口命名规范(java接口命名规则)
- 2024-10-14 Java常用的API总结(java中的api使用手册)
- 2024-10-14 java使用apache poi操作word文档(java api doc)
- 2024-10-14 java与es8实战:Java API Client有关的知识点串讲
- 2024-10-14 Java Scripting API 使用示例(java script功能)
- 2024-10-14 springboot-如何集成Swagger3生成接口文档
- 2024-10-14 Java String类(java string类型比较)
- 2024-10-14 一款零注解侵入的 API 文档生成工具,你用过吗?
- 2024-10-14 Java 文档注解最全详解,建议收藏!
- 2024-10-14 JDK 18:Java 18预览(javajdk环境变量配置)
你 发表评论:
欢迎- 04-09使用SLF4J日志框架及相关的桥接模式
- 04-09OAuth2协议在Java应用中的优雅实现
- 04-09【Java面试题】MyBatis的工作原理
- 04-09新项目终于用上了jdk24(jdk发布)
- 04-09Java 中虚拟线程(线程虚拟化)
- 04-09小白都能看得懂的java虚拟机内存模型
- 04-09单个表上亿行数据的主键、索引设计,及分页查询
- 04-09Java这个高级特性,很多人还没用过
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)