反射机制概述及基本用法
Java 中最为强大的技术莫过于反射技术,通过 Java 的反射机制,程序员可以更深入地控制程序的运行过程,如在程序运行时对用户输入的信息进行验证,还可以逆向控制程序的执行过程。此外,反射技术也被誉为 Java 框架设计的灵魂,很多优秀的开源框架都是通过反射机制来实现的。下面我们将详细介绍反射的基本用法,并通过一个案例来运用所学的知识。
一、基本原理在介绍反射机制之前,先来介绍一下Java代码在计算机中经历的三个阶段,如下图所示:
当我们编写一段Java代码(如上图定义了一个Person类)之后,通过javac编译器编译之后生成字节码文件,这一阶段称之为源码阶段。
在生成字节码文件之后需要用类加载器(ClassLoader)将字节码文件加载进内存,在内存中会有一个Class类来描述字节码文件,Class类对象将所有的类抽象成由Field、Constructor、Method这三部分组成。
当创建好一个对象(如上图中通过 new Person() 构造方法创建了一个Person对象)之后便进入了最后一个阶段——运行时阶段。
由以上的内容可知,反射从本质上来说,就是将类的各个 ...
Spring Boot配置SSL证书
目前越来越多的网站开始支持HTTPS连接,而想要支持HTTPS连接就必须要有SSL证书,下面将介绍如何在Spring Boot项目中配置SSL证书。
一、获取证书1、生成证书关于如何获取SSL证书,请阅读:SSL证书生成和配置
2、添加证书将JKS格式的SSL放入项目根目录下src/main/resources文件夹中即可。
二、修改配置文件1、application.properties在application.properties文件中添加以下内容:
123456789101112#证书位置server.ssl.key-store=classpath:<filename>.jks#密钥库密码server.ssl.key-password=<password>#证书类型server.ssl.key-store-type=JKS#证书别名server.ssl.key-alias=<alias># 设置监听端口tomcat.listen.port=80# 设置重定向端口tomcat.redirect.port=443
注意最后两项tomcat.lis ...
SSL证书生成和配置
SSL(Secure Socket Layer)由Netscape公司于1994年创建,它旨在通过Web创建安全的Internet通信。它是一种标准协议,用于加密浏览器和服务器之间的通信。它允许通过Internet安全轻松地传输账号密码、银行卡、手机号等私密信息。SSL证书就是遵守SSL协议,由受信任的CA(Certificate Authority)机构颁发的数字证书。它有很多种类和品牌,不同种类的SSL证书有不同功能。
一、如何获取SSL证书1、购买证书SSL证书分为以下三种类型:
域名型DV:信任等级普通,只需验证网站的真实性便可颁发证书保护网站
企业型OV:信任等级强,须要验证企业的身份,审核严格,安全性更高
增强型EV:信任等级最高,一般用于银行证券等金融机构,审核严格,安全性最高
如果是个人站点和应用,一般推荐申请域名型SSL证书即可;如果是中小型企业站点或电子商务站点和应用,一般推荐申请企业型SSL证书;如果是大型企业和政府机构站点或大型金融平台,一般推荐申请增强型SSL证书。
此外,SSL证书还可分为单域名证书、多域名证书、泛域名证书。不同类型的证书的价格也有所不同 ...
Spring Boot整合JavaMail实现邮件发送
邮件发送是一个非常常见的功能,注册时的身份认证、重要通知发送等都会用到邮件发送。Sun公司提供了JavaMail用来实现邮件发送,但是配置烦琐,Spring 中提供了JavaMailSender用来简化邮件配置,Spring Boot则提供了MailSenderAutoConfiguration对邮件的发送做了进一步简化,本文将介绍Spring Boot如何实现邮件发送功能。
一、环境配置1、导入依赖使用Maven在项目中引入spring-boot-starter-mail依赖
1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId></dependency>
2、添加配置信息引入依赖之后,在application.properties文件中添加以下配置:
12345678910111213141516# smtp服务器主机地址spring ...
Spring Boot整合JWT实现单点登录及身份认证
在之前的一篇文章中我们已经详细介绍了什么是JWT以及JWT的组成和工作流程。本文将介绍JWT在Spring Boot项目中该如何应用。
一、导入JAR首先我们使用Maven进行导入,我导入的版本是0.9.0,若需导入其它版本的,请访问mvnrepository获取更多版本的信息
123456<!-- JSON Web Token Support For The JVM --><dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.0</version></dependency>
二、编写工具类该工具类将JWT的常用功能进行封装,方便开发人员使用
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 ...
JWT简介与基本原理
JSON Web Tokens(JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON 的开放标准(RFC 7519)。该 Token 被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT 的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该 Token 也可直接被用于认证,也可被加密。
一、为什么要使用JWT1、传统的鉴权机制HTTP 协议是一种无状态的协议,这就意味着如果用户向服务端提供了用户名和密码来进行用户认证,那么下一次请求时,用户还要再一次进行用户认证才行,因为根据 HTTP 协议,我们无法知道是哪个用户发出的请求,所以为了让服务端能识别是哪个用户发出的请求,只能在服务器存储一份用户登录的信息,这份登录信息会在响应时传递给浏览器,并将其保存在 cookie 中,以便下次请求时发送给服务端,这样服务端就能识别请求来自哪个用户,这就是基于 session 的认证。
但是这种基于 session 的认证使应用本身很难得到扩展,随着不同客户端用户的增加, ...
HTTP 报文
有两种 HTTP 报文的类型,请求(request)与响应(response),每种都有其特定的格式,下面将分别介绍这两种类型的报文。
一、HTTP 请求HTTP 请求报文由**请求行(Request Line)、请求头(Request Header)、请求体(Request Body)**这三部分组成,下图是HTTP请求报文的格式:
备注
请求行和请求头都是以回车符<CR> + 换行符<LF>作为结束标志,同时在请求头的后面紧跟的是请求空行,这一行仅发送回车符<CR> + 换行符<LF>,用来表示请求头已发送完成,这样做是因为请求头的个数是不确定的,如果没有加入请求空行,WEB服务器就无法知道请求头到底什么时候结束。
并不是所有的请求都有请求体,如GET、DELETE请求是没有请求体的,而POST、PUT请求是有请求体的。
1、请求方法下面将列出所有请求方法的名称及描述:
序号
方法名称
描述
1
GET
GET方法请求一个指定资源的表示形式,使用GET的请求应该只被用于获取数据
2
HEAD
HEAD方法请求一个 ...
HTTP 概述
HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP 是一个基于 TCP/IP 通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
一个完整的 Web 文档通常是由不同的子文档拼接而成的,像是文本、布局描述、图片、视频、脚本等等。
一、HTTP 的基本性质1、HTTP是简单的虽然下一代HTTP/2协议将HTTP消息封装到了帧(frames)中,HTTP大体上还是被设计得简单易读。HTTP报文能够被人读懂,还允许简单测试,降低了门槛,对新人很友好。
2、HTTP是可扩展的在 HTTP/1.0 中出现的 HTTP headers 让协议扩展变得非常容易。只要服务端和客户端就新 headers 达成语义一致,新功能就可以被轻松加入进来。
3、HTTP是无状态的HTTP是无状态的。在同一个连接中,两个执行成功的请求之间是没有关系的。这就带来了一个问题,用户没有办法在同一个网站中进行连续的交互,比如在一个电商网站里,用户把某个商品加入到 ...
Java的数据类型
Java 中有两大数据类型,一是基本类型,二是引用类型。基本类型包括数值型,布尔型,字符型。下图展示了基本数据类型所包含的内容:
一、基本类型1. 整数类型
类型
位宽
取值范围
默认值
byte
8
-2^7 ~ 2^7 - 1
0
short
16
-2^15 ~ 2^15 - 1
0
int
32
-2^31 ~ 2^31 - 1
0
long
64
-2^63 ~ 2^63 - 1
0L
【注】整数类型的数在计算机中均以二进制补码的形式保存。
2. 浮点数类型
类型
位数(符合 IEEE 754标准)
默认值
float
32
0.0f
double
64
0.0d
【注】浮点数不能用来表示精确的值,如货币等。
3. 字符类型char 类型是一个单一的 16 位 Unicode 字符,因此 char 类型可以储存任何字符。取值范围: \u0000 ~ \uffff (0 ~ 65,535)
4. 布尔类型boolean 数据类型表示一位的信息,只有两个取值: true 和 false ,默认值是 false 。
二、引用类型在 Ja ...
Git 简介与安装配置
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
Git 的项目地址:https://github.com/git/git
一、安装1. 在 Linux 系统上安装 GitGit 的工作需要调用 curl,zlib,openssl,expat,libiconv 等库的代码,所以需要先安装这些依赖工具。
在有 yum 的系统上(比如 Fedora)或者有 apt-get 的系统上(比如 Debian 体系),可以用下面的命令安装:
各 Linux 系统可以使用其安装包管理工具(apt-get、yum 等)进行安装:
Debian / Ubuntu
123$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \ libz-dev libssl-dev$ apt-get ...