编程自学指南:java程序设计开发,HTTPS 与认证授权进阶
一、课程信息
学习目标
- 理解 HTTPS 的核心原理与加密机制
- 掌握 HTTPS 的配置流程与证书管理
- 掌握认证与授权的核心概念与实现方式
- 能在项目中集成 HTTPS 与安全框架
二、课程导入:HTTP 的不安全因素
🌰 快递运输类比
协议 | 运输方式 | 安全风险 |
---|---|---|
HTTP | 普通快递 | 中途被拆包、篡改(明文传输) |
HTTPS | 加密快递(锁 + 钥匙) | 只有收件人能打开(加密 + 认证) |
三、HTTPS 核心原理
🔍 1. 加密机制
✅ 对称加密 vs 非对称加密
类型 | 特点 | 案例 |
---|---|---|
对称加密 | 加密和解密用同一把钥匙 | AES 算法 |
非对称加密 | 公钥加密,私钥解密 | RSA 算法 |
✅ HTTPS 混合加密流程
sequenceDiagram
User->>Server: 提交用户名/密码
Server->>Server: 验证通过
Server->>User: 返回 JWT Token
User->>Server: 携带 Token 请求资源
Server->>Server: 验证 Token 有效性
Server->>User: 返回资源
🔍 2. SSL/TLS 协议
- 作用:在客户端与服务器之间建立加密的安全通道
- 握手流程:
- 客户端发送支持的加密算法列表
- 服务器选择加密算法,发送证书(含公钥)
- 客户端验证证书有效性,生成对称密钥并加密传输
四、HTTPS 配置实战
🔥 案例 1:Tomcat 启用 HTTPS
步骤 1:生成自签名证书
keytool -genkey -alias tomcat -keyalg RSA -keysize 2048 -keystore keystore.jks
(输入密码:123456
,别名:tomcat
)
步骤 2:配置 Tomcat(server.xml)
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="conf/keystore.jks" keystorePass="123456"/>
步骤 3:测试访问
https://localhost:443/login.jsp
🔥 案例 2:使用 Let's Encrypt 免费证书
- 安装 Certbot:
sudo apt-get install certbot
- 申请证书:
certbot --apache -d yourdomain.com
- 配置 Tomcat 使用生成的证书
五、认证(Authentication)详解
🔍 1. 核心概念
- 定义:验证用户身份的过程(你是谁?)
- 常见方式:
✅ 用户名 / 密码
✅ 短信验证码
✅ 第三方登录(OAuth)
🔥 案例:表单认证(原生 Servlet)
登录页(login.jsp)
<form action="/login" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
登录 Servlet
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
if ("admin".equals(username) && "123".equals(password)) {
req.getSession().setAttribute("user", username);
resp.sendRedirect("/home.jsp");
} else {
resp.sendRedirect("/login.jsp?error=1");
}
}
}
🔧 增强:密码加密存储
// 使用 BCrypt 加密
String hashedPassword = BCrypt.hashpw(password, BCrypt.gensalt());
// 验证密码
if (BCrypt.checkpw(inputPassword, storedHash)) {
// 认证通过
}
六、授权(Authorization)详解
🔍 1. 核心概念
- 定义:验证用户是否有权限执行操作(你能做什么?)
- 常见模型:
✅ RBAC(基于角色的访问控制):用户→角色→权限
🔥 案例:RBAC 实现(Filter)
权限注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RequiresRole {
String value(); // 角色名,如 "admin"
}
权限 Filter
@WebFilter("/*")
public class AuthFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
String role = (String) request.getSession().getAttribute("role");
// 获取请求的 Servlet 方法
Servlet servlet = ((HttpServletRequest) req).getAttribute(
DispatcherType.INCLUDE.name() + ".servlet"
);
if (servlet instanceof HttpServlet) {
RequiresRole annotation = ((HttpServlet)servlet).getClass()
.getMethod("doGet", HttpServletRequest.class, HttpServletResponse.class)
.getAnnotation(RequiresRole.class);
if (annotation != null && !annotation.value().equals(role)) {
((HttpServletResponse) res).sendError(HttpServletResponse.SC_FORBIDDEN);
return;
}
}
chain.doFilter(req, res);
}
}
七、关联知识:HTTPS 与认证授权
🔗 1. HTTPS 对认证的增强
- 防止中间人攻击:证书验证确保通信对象是可信的
- 保护密码传输:密码在 HTTPS 下加密传输
🔗 2. 与 Spring Security 的集成
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</dependency>
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.logout();
}
}
八、课堂练习
练习 1:配置 HTTPS
任务:
- 为本地 Tomcat 生成自签名证书
- 将原有 HTTP 应用迁移到 HTTPS
练习 2:基于角色的授权
任务:
- 在用户登录时分配角色(admin/user)
- 限制
/admin
路径仅 admin 角色可访问
九、课程总结
知识图谱:
HTTPS 与认证授权
↳ HTTPS:
✅ 加密机制(对称+非对称)
✅ 证书配置(自签名/Let's Encrypt)
↳ 认证:
✅ 表单认证、密码加密
↳ 授权:
✅ RBAC 模型、Filter 实现
口诀记忆:
“HTTPS 加密好,证书配置不能少,
认证验身份,授权管权限,
密码加密存,角色控访问,
安全框架来助力,Web 应用更可靠!”
十、下节课内容推荐
课程主题:OAuth 2.0 与 JWT 实战
主要内容:
- OAuth 2.0 四种授权模式(授权码模式、简化模式等)
- JWT 在 OAuth 中的应用
- 第三方登录(微信、QQ 登录)实现
- 前后端分离场景下的认证授权
十一、课后作业
必做 1:HTTPS 银行转账
要求:
- 将之前的转账功能迁移到 HTTPS
- 增加密码加密存储与 RBAC 权限控制
必做 2:Spring Security 集成
任务:
- 使用 Spring Security 重构登录授权功能
- 实现记住我、注销等功能