使用Java API的5个技巧

本文介绍了一些关于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>`
Java学习交流QQ群:589809992 我们一起学Java!复制代码

然后就可以通过浏览器中,在访问应用地址后输入/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 把它们放在“危险区域”,以提醒用户,这是十分有用的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

管道模式 pipe

先放一个图&#xff0c;预则立嘛 PipelinePattern.rar 这里是 不完整的码转载于:https://www.cnblogs.com/ganmk--jy/p/5525897.html

《零基础看得懂的C++入门教程 》——(7)小数组玩起来

一、学习目标 了解数组的使用方法了解一维数组的使用方法了解一维数组与循环的使用方法 目录 预备第一篇&#xff0c;使用软件介绍在这一篇&#xff0c;C与C使用的软件是一样的&#xff0c;查看这篇即可&#xff1a;《软件介绍》 想了解编译原理和学习方法点这篇&#xff0c…

SSO 方案演进

1背景介绍 随着业务与技术的发展&#xff0c;现今比以往任何时候都更需要单点登录 SSO 身份验证。现在几乎每个网站都需要某种形式的身份验证才能访问其功能和内容。随着网站和服务数量的增加&#xff0c;集中登录系统已成为一种必要。在本文中&#xff0c;我们将讨论下 …

【计算机图形学】实验:VB.net环境下的图形裁剪完整实验操作流程

一、实验目的: 熟练掌握在.net环境下对图形的裁剪。 二、实验准备: 学习图形裁剪的基本算法,以及在.net环境下裁剪图形的基本方法。 三、实验内容: 在.net环境中利用裁剪图形的基本方法对任意图形进行裁剪。

UI之常用通过颜色值和透明度怎么得到最后的颜色值

1 、问题 UI给了颜色#000000&#xff0c;透明度是75%&#xff0c;我需要最终的颜色值。 2 、透明度色值表 00%FF&#xff08;不透明&#xff09; 5%F2 10%E5 15%D8 20%CC 25%BF 30%B2 35%A5 40%99 45%8c 50%7F 55%72 60%66 65%59 70%4c 75%3F 80%33 85%21 90%19 95%0c 100%00…

《零基础看得懂的C++入门教程 》——(8)搞定二维数组与循环嵌套

一、学习目标 了解二维数组的使用方法了解循环嵌套的使用方法 目录 预备第一篇&#xff0c;使用软件介绍在这一篇&#xff0c;C与C使用的软件是一样的&#xff0c;查看这篇即可&#xff1a;《软件介绍》 想了解编译原理和学习方法点这篇&#xff0c;学习方法和一些原理C与C都…

mybatis模糊查询不同写法

工作中用到&#xff0c;写三种用法吧&#xff0c;第四种为大小写匹配查询 1. sql中字符串拼接 SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT(%, #{text}), %); 2. 使用 ${...} 代替 #{...} SELECT * FROM tableName WHERE name LIKE %${text}%; 3. 程序中拼接 Java …

常见的Ubuntu命令30条(一)

Ubuntu命令是指在Ubuntu操作系统中用于执行各种任务和操作的命令行指令。这些命令可以用于管理系统、配置网络、安装软件、浏览文件等。Ubuntu命令通常在终端&#xff08;Terminal&#xff09;应用程序中输入并执行。 在Ubuntu中&#xff0c;有许多常用的命令和指令。以下是一…

【计算机图形学】实验:C#.net环境下的图形变换完整实验操作流程

一、实验目的: 熟练掌握在.net环境下对图形的变换方法。 二、实验准备: 学习图形变换的基本算法,如平移、旋转、缩放等,以及在.net环境下变换图形的基本方法。 三、实验内容: 在.net环境中利用变换图形的基本方法对图形进行变换,包括平移、旋转、缩放、对称、复合变…

Android之给ImageView添加点击效果

1 问题 给ImageView添加点击效果 2 解决办法 1&#xff09;、新建selector.xml文件 <?xml version"1.0" encoding"utf-8"?> <selector xmlns:android"http://schemas.android.com/apk/res/android"><item android:drawable&…

python基础知识纵览(下)

python函数 1.函数作用 最大化代码重用和最小化代码冗余流程的分解2.函数基本概念 def创建对象并赋值给某一变量## 创建一个函数对象并赋值给fn_namedef fn_name(args1,args2,...,argsN): <statements>复制代码def是可执行的代码## 通过if语句判断来做定义函数,def是实…

《零基础看得懂的C++入门教程 》——(9)结构体原来如此

一、学习目标 了解C语言的结构体的使用方法了解C语言结构体的结构的赋值了解多种C语言结构体变量的赋值方法和取值方法 目录 预备第一篇&#xff0c;使用软件介绍在这一篇&#xff0c;C与C使用的软件是一样的&#xff0c;查看这篇即可&#xff1a;《软件介绍》 想了解编译原…

微信小程序python token验证_微信小程序python 用户认证

按流程图来先通过wx.login()获取code,再通过我们后台配置的接口获取openid和session_key// 登录wx.login({success: res > {console.log(res)// 发送 res.code 到后台换取 openId, sessionKey, unionIdwx.request({url: api.GET_OPENID, //data: {js_code: res.code},succes…

C#实用技巧之:将图标打包进DLL并读取

概述个人的项目界面有时候需要用到很多图标&#xff0c;这些图片可以建立一个文件夹单独存放&#xff0c;但有时涉及到多台设备部署的话&#xff0c;每台设备都需要随项目一起拷贝过去&#xff0c;如果忘记了界面显示就会出问题&#xff0c;有没有更好的办法解决&#xff1f;有…

强制IE浏览器或WebBrowser控件使用指定版本显示网页

最近为了抓取淘宝的成交数据,用C#的WebBrowser控件开发了一个简单的程序. 发现WebBrowser控件默认使用的版本是IE7的兼容模式.而淘宝的宝贝详细页居然对IE7的支持不是很好. 成交记录无法显示,而我本机安装的是IE10,那么有没有办法使我的WebBrowser控件的使用的IE版本高点呢? 查…

【计算机图形学】实验:VB.net环境下的绘制贝赛尔(Bezier)自由曲线完整实验操作步骤

一、实验目的 熟练掌握在.net环境下绘制贝赛尔自由曲线。 二、实验准备 学习生成贝赛尔自由曲线的基本算法,以及在.net环境下绘制贝赛尔自由曲线的基本方法(DrawBezier和DrawBeziers)。 三、实验内容 在.net环境中绘制二次、三次贝赛尔曲线。 四、实验过程及步骤 (包…

Git之撤销add操作

1 问题 git add file或者git add folder错了 2 解决办法 git reset HEAD 如果后面什么都不跟的话 就是上一次add 里面的全部撤销了 git reset HEAD XXX/XXX/XXX.java 就是对某个文件进行撤销了 git reset HEAD XXX/XXX/XXX/. 就是对某个文件夹进行撤销了

配置FTP服务2(vsftpd 配置虚拟账号)

1. 安装软件yum -y install vsftpd* yum -y install pam* yum -y install db4*2. 建立虚拟账号相关联的系统账号useradd virftp -s /sbin/nologin 3. 建立虚拟账户相关的文件touch /etc/vsftpd/vsftpd_login并把你要建立的用户写到里面&#xff0c;奇数行是用户名&#xff…

《零基础看得懂的C++入门教程 》——(10)面向对象

一、学习目标 了解C类是什么了解类对象与类型修饰一样进行创建了解了类的属性如何使用了解了类方法的使用方法 目录 预备第一篇&#xff0c;使用软件介绍在这一篇&#xff0c;C与C使用的软件是一样的&#xff0c;查看这篇即可&#xff1a;《软件介绍》 想了解编译原理和学习…

appinventor连接MySQL_appinventor如何连接sqlserver数据库

java中使用jdbc连接sqlserver数据库步骤&#xff1a;1。JDBC连接SQLServer的驱动安装,前两个是属于数据库软件,正常安装即可(注意数据库登陆不要使用windows验证)将JDBC解压缩到任意位置,比如解压到C盘programfiles下面,并在安装目录里找到sqljdbc。jar文件,得到其路径开始配置…