编程自学指南:java程序设计开发,HTTPS 与认证授权进阶, HTTPS 的核心原理与加密机制,HTTPS 的配置流程与证书管理,认证与授权的核心概念与实现方式

编程自学指南:java程序设计开发,HTTPS 与认证授权进阶

一、课程信息

学习目标

  1. 理解 HTTPS 的核心原理加密机制
  2. 掌握 HTTPS 的配置流程证书管理
  3. 掌握认证授权的核心概念与实现方式
  4. 能在项目中集成 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 协议

  • 作用:在客户端与服务器之间建立加密的安全通道
  • 握手流程
    1. 客户端发送支持的加密算法列表
    2. 服务器选择加密算法,发送证书(含公钥)
    3. 客户端验证证书有效性,生成对称密钥并加密传输

四、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 免费证书

  1. 安装 Certbot:
    sudo apt-get install certbot
    
  2. 申请证书:
    certbot --apache -d yourdomain.com
    
  3. 配置 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

任务

  1. 为本地 Tomcat 生成自签名证书
  2. 将原有 HTTP 应用迁移到 HTTPS

练习 2:基于角色的授权

任务

  1. 在用户登录时分配角色(admin/user)
  2. 限制 /admin 路径仅 admin 角色可访问

九、课程总结

知识图谱:

HTTPS 与认证授权  
   ↳ HTTPS:  
      ✅ 加密机制(对称+非对称)  
      ✅ 证书配置(自签名/Let's Encrypt)  
   ↳ 认证:  
      ✅ 表单认证、密码加密  
   ↳ 授权:  
      ✅ RBAC 模型、Filter 实现  

口诀记忆:

“HTTPS 加密好,证书配置不能少,
认证验身份,授权管权限,
密码加密存,角色控访问,
安全框架来助力,Web 应用更可靠!”

十、下节课内容推荐

课程主题:OAuth 2.0 与 JWT 实战
主要内容

  1. OAuth 2.0 四种授权模式(授权码模式、简化模式等)
  2. JWT 在 OAuth 中的应用
  3. 第三方登录(微信、QQ 登录)实现
  4. 前后端分离场景下的认证授权

十一、课后作业

必做 1:HTTPS 银行转账

要求

  1. 将之前的转账功能迁移到 HTTPS
  2. 增加密码加密存储与 RBAC 权限控制

必做 2:Spring Security 集成

任务

  1. 使用 Spring Security 重构登录授权功能
  2. 实现记住我、注销等功能
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zl515035644

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值