Java API 接口的安全是一个系统性工程,需要从认证、授权、数据保护、防护攻击、代码安全等多个层面综合考虑。下面我按实战角度给你一个完整的安全方案,从“最基础”到“企业级”逐步展开。
✅ 防止未授权访问
✅ 防止数据泄露 / 篡改
✅ 防止接口被滥用(刷接口、重放攻击)
✅ 防止常见 Web 攻击
✅ 保证系统稳定性
❌ 错误示例:
@GetMapping("/user/info")
public User info() {
return userService.getCurrentUser();
}
✅ 正确做法:必须登录后才能访问
String token = JWT.create()
.withClaim("userId", user.getId())
.withExpiresAt(new Date(System.currentTimeMillis() + 3600_000))
.sign(Algorithm.HMAC256(secret));
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...
public class JwtFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(...) {
String token = request.getHeader("Authorization");
if (!verifyToken(token)) {
response.setStatus(401);
return;
}
filterChain.doFilter(request, response);
}
}
✅ 优点:无状态、适合分布式
❌ 缺点:Token 无法立即失效(可配合 Redis)
适合:
常用方案:
@PreAuthorize("hasRole('ADMIN')")
@GetMapping("/admin/users")
public List<User> users() {
return userService.list();
}
@PreAuthorize("hasAuthority('user:read')")
✅ 避免“登录就能访问所有接口”
if redis.call('incr', KEYS[1]) == 1 then
redis.call('expire', KEYS[1], ARGV[1])
end
return redis.call('get', KEYS[1])
✅ 控制:
方案:
timestampnonceif (now - timestamp > 5 * 60 * 1000) {
throw new RuntimeException("请求过期");
}
❌ HTTP = 裸奔
✅ HTTPS 防止中间人攻击
❌
GET /user?phone=13800000000
✅
POST /user
Body: { "phone": "13800000000" }
user.setPhone("138****0000");
❌
String sql = "select * from user where name = '" + name + "'";
✅
@Select("select * from user where name = #{name}")
或使用 JPA
HtmlUtils.htmlEscape(content);
@PostMapping("/user")
public void create(@Valid @RequestBody UserDTO dto) {
}
public class UserDTO {
@NotBlank
@Size(max = 20)
private String name;
}
✅ 防止非法数据进入业务逻辑
✅ 必须记录:
❌ 禁止日志中打印:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and()
.addFilter(new JwtFilter());
}
✅ HTTPS
✅ JWT / OAuth2
✅ 接口鉴权
✅ 接口限流
✅ 参数校验
✅ SQL 防注入
✅ 敏感数据加密
✅ 日志审计
✅ 异常统一处理
你可以直接说:
我可以按生产级标准帮你设计。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。