快速上手Spring Cloud 十一:微服务架构下的安全与权限管理
在微服务架构中,安全和权限管理是核心组件之一。以下是一个简化的例子,展示了如何使用Spring Cloud和Spring Security构建基于角色的访问控制。
- 引入Spring Security依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
- 配置Spring Security
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/h2-console/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("{noop}user").roles("USER")
.and()
.withUser("admin").password("{noop}admin").roles("USER", "ADMIN");
}
}
- 创建一个简单的登录页面(login.html)
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<title>Login Page</title>
</head>
<body>
<h2>Login</h2>
<form th:action="@{/login}" method="post">
<div><label> User Name : <input type="text" name="username" /> </label></div>
<div><label> Password: <input type="password" name="password" /> </label></div>
<div><input type="submit" value="Login" /></div>
</form>
</body>
</html>
- 创建一个简单的服务,使用
@PreAuthorize
注解来保护端点
@RestController
public class SampleController {
@GetMapping("/user/hello")
@PreAuthorize("hasRole('USER')")
public String helloUser() {
return "Hello User!";
}
@GetMapping("/admin/hello")
@PreAuthorize("hasRole('ADMIN')")
public String helloAdmin() {
return "Hello Admin!";
}
}
这个简单的例子展示了如何设置Spring Security,创建一个登录页面,以及如何使用@PreAuthorize
注解来保护微服务中的端点。在实际应用中,你可能需要使用数据库来存储用户信息和权限,并且可能需要与OAuth2或JWT等认证机制集成。
评论已关闭