协议 | 运输方式 | 安全风险 |
---|---|---|
HTTP | 普通快递 | 中途被拆包、篡改(明文传输) |
HTTPS | 加密快递(锁 + 钥匙) | 只有收件人能打开(加密 + 认证) |
类型 | 特点 | 案例 |
---|---|---|
对称加密 | 加密和解密用同一把钥匙 | AES 算法 |
非对称加密 | 公钥加密,私钥解密 | RSA 算法 |
sequenceDiagram
User->>Server: 提交用户名/密码
Server->>Server: 验证通过
Server->>User: 返回 JWT Token
User->>Server: 携带 Token 请求资源
Server->>Server: 验证 Token 有效性
Server->>User: 返回资源
keytool -genkey -alias tomcat -keyalg RSA -keysize 2048 -keystore keystore.jks
(输入密码:123456
,别名:tomcat
)
https://localhost:443/login.jsp
sudo apt-get install certbot
certbot --apache -d yourdomain.com
@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)) {
// 认证通过
}
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RequiresRole {
String value(); // 角色名,如 "admin"
}
@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);
}
}
org.springframework.security
spring-security-web
@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();
}
}
任务:
任务:
/admin
路径仅 admin 角色可访问HTTPS 与认证授权
↳ HTTPS:
✅ 加密机制(对称+非对称)
✅ 证书配置(自签名/Let's Encrypt)
↳ 认证:
✅ 表单认证、密码加密
↳ 授权:
✅ RBAC 模型、Filter 实现
“HTTPS 加密好,证书配置不能少,
认证验身份,授权管权限,
密码加密存,角色控访问,
安全框架来助力,Web 应用更可靠!”
课程主题:OAuth 2.0 与 JWT 实战
主要内容:
要求:
任务: