温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java API接口怎样鉴权

发布时间:2026-10-02 10:57:04 来源:亿速云 阅读:100 作者:小樊 栏目:编程语言

在 Java 里做 API 接口鉴权(Authentication / Authorization),常见做法有几种,下面按使用频率和场景给你梳理一下,并附上示例。


一、最常见方案:Token 鉴权(JWT)

1️⃣ JWT(JSON Web Token)

适合:前后端分离、移动端、微服务

流程

  1. 用户登录
  2. 服务端生成 JWT
  3. 前端每次请求在 Header 中携带
  4. 服务端校验 JWT

示例(Spring Boot)

// 登录接口
@PostMapping("/login")
public String login(@RequestBody User user) {
    if ("admin".equals(user.getUsername()) && "123".equals(user.getPassword)) {
        return JwtUtil.createToken(user.getUsername());
    }
    throw new RuntimeException("账号或密码错误");
}
// 拦截器校验
public class JwtInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) {
        String token = request.getHeader("Authorization");
        if (token == null || !JwtUtil.verify(token)) {
            response.setStatus(401);
            return false;
        }
        return true;
    }
}

二、Session + Cookie(传统方式)

适合:单体 Web 应用

特点

  • 服务端保存 Session
  • 浏览器自动带 Cookie
@PostMapping("/login")
public void login(HttpSession session) {
    session.setAttribute("user", "admin");
}

@GetMapping("/api")
public String api(HttpSession session) {
    if (session.getAttribute("user") == null) {
        throw new RuntimeException("未登录");
    }
    return "ok";
}

三、OAuth2 / Spring Security(企业级)

适合:第三方授权、微服务、统一登录

常见模式

  • 授权码模式(最安全)
  • 密码模式(内部系统)
  • 客户端模式(服务间调用)

Spring Security OAuth2 示例

@EnableAuthorizationServer
@Configuration
public class AuthServer extends AuthorizationServerConfigurerAdapter {
    // 配置 client、token 存储等
}

四、API Key(简单接口鉴权)

适合:开放 API、内部服务调用

@GetMapping("/api")
public String api(@RequestHeader("api-key") String apiKey) {
    if (!"abc123".equals(apiKey)) {
        throw new RuntimeException("非法请求");
    }
    return "success";
}

五、签名鉴权(防篡改)

适合:高安全场景(支付、开放平台)

思路

  1. 参数 + 密钥 → 生成签名
  2. 服务端重新计算签名比对
String sign = MD5(params + secret);
if (!sign.equals(requestSign)) {
    throw new RuntimeException("签名错误");
}

六、推荐方案总结

场景 推荐方案
前后端分离 JWT
传统 Web Session
微服务 OAuth2
开放 API API Key + 签名
高安全 OAuth2 + 签名

七、最佳实践建议

✅ 密码必须加密(BCrypt)
✅ Token 设置过期时间
✅ HTTPS 必开
✅ 接口统一拦截鉴权
✅ 错误信息不要暴露细节


如果你能告诉我:

  • 用的是 Spring Boot / Spring Cloud / 原生 Servlet
  • 是 前后端分离还是传统项目
  • 是否需要 第三方登录

我可以直接给你一套可落地的完整鉴权方案。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手