在 Java 中进行 HTTP 鉴权(Authentication / Authorization),常见方式取决于你使用的是 客户端调用 HTTP 接口,还是 服务端接收并校验 HTTP 请求。下面按场景系统说明。
String auth = "user:password";
String encoded = Base64.getEncoder()
.encodeToString(auth.getBytes(StandardCharsets.UTF_8));
URL url = new URL("https://api.example.com/data");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Authorization", "Basic " + encoded);
✅ 简单
❌ 明文(必须配合 HTTPS)
conn.setRequestProperty("Authorization", "Bearer " + token);
常用于:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/data"))
.header("Authorization", "Bearer " + token)
.build();
HttpResponse<String> response =
client.send(request, HttpResponse.BodyHandlers.ofString());
示例(OkHttp 拦截器):
public class AuthInterceptor implements Interceptor {
public Response intercept(Chain chain) throws IOException {
Request req = chain.request()
.newBuilder()
.addHeader("Authorization", "Bearer " + getToken())
.build();
return chain.proceed(req);
}
}
流程:
Authorization: Bearer xxx示例 Filter:
public class JwtFilter extends OncePerRequestFilter {
protected void doFilterInternal(
HttpServletRequest request,
HttpServletResponse response,
FilterChain chain) throws ServletException, IOException {
String token = request.getHeader("Authorization");
if (token == null || !token.startsWith("Bearer ")) {
response.setStatus(401);
return;
}
// 解析并校验 JWT
chain.doFilter(request, response);
}
}
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/login").permitAll()
.anyRequest().authenticated()
)
.oauth2ResourceServer(oauth -> oauth.jwt());
return http.build();
}
}
if (!"valid-token".equals(request.getHeader("X-API-Key"))) {
response.setStatus(403);
return;
}
适合:
| 方式 | 场景 | 安全性 |
|---|---|---|
| Basic Auth | 内部/测试 | ❌ |
| API Key | 服务间 | ⚠️ |
| JWT | Web / App | ✅ |
| OAuth2 | 第三方授权 | ✅✅ |
| Session | 传统 Web | ✅ |
✅ 永远使用 HTTPS
✅ Token 设置过期时间
✅ 敏感信息不要放 URL
✅ 服务端校验必须严谨
✅ 使用成熟框架(Spring Security)
如果你愿意,可以告诉我:
我可以直接给你 可运行的代码示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。