在 Java 中,API 接口鉴权(Authentication & Authorization)常见做法取决于系统架构(单体 / 微服务)、安全级别和是否使用 Spring。下面按常见方案 → 实现思路 → 示例代码来说明。
适用场景:前后端不分离、单体应用
流程
特点
适用场景:前后端分离、微服务、移动端
流程
Authorization示例 Header
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...
适用场景
角色
适用场景
方式
@PostMapping("/login")
public String login(@RequestBody LoginRequest req) {
if ("admin".equals(req.getUsername()) && "123".equals(req.getPassword())) {
return JwtUtil.generateToken(req.getUsername());
}
throw new RuntimeException("用户名或密码错误");
}
public class JwtUtil {
private static final String SECRET = "secret-key";
private static final long EXPIRATION = 3600_000;
public static String generateToken(String username) {
return Jwts.builder()
.setSubject(username)
.setExpiration(new Date(System.currentTimeMillis() + EXPIRATION))
.signWith(SignatureAlgorithm.HS256, SECRET)
.compact();
}
public static String parseToken(String token) {
return Jwts.parser()
.setSigningKey(SECRET)
.parseClaimsJws(token)
.getBody()
.getSubject();
}
}
@Component
public class JwtFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain chain)
throws IOException, ServletException {
String auth = request.getHeader("Authorization");
if (auth == null || !auth.startsWith("Bearer ")) {
response.setStatus(401);
return;
}
String token = auth.substring(7);
try {
String user = JwtUtil.parseToken(token);
// 可存入上下文
UserContext.set(user);
} catch (Exception e) {
response.setStatus(401);
return;
}
chain.doFilter(request, response);
}
}
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean<JwtFilter> jwtFilter() {
FilterRegistrationBean<JwtFilter> bean = new FilterRegistrationBean<>();
bean.setFilter(new JwtFilter());
bean.addUrlPatterns("/api/*");
return bean;
}
}
http
.csrf().disable()
.authorizeHttpRequests()
.requestMatchers("/login").permitAll()
.anyRequest().authenticated()
.and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
| 类型 | 说明 |
|---|---|
| 鉴权(Authentication) | 你是谁? |
| 授权(Authorization) | 你能干什么? |
示例
@PreAuthorize("hasRole('ADMIN')")
public void deleteUser() {}
✅ 使用 JWT + Spring Security
✅ Token 过期 + 刷新 Token
✅ HTTPS
✅ 黑名单 / 白名单
✅ 签名密钥放配置中心
如果你愿意,可以告诉我:
我可以给你更贴合你项目的完整方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。