下面我们来看一个完整的Cloud Security Filter示例。这个示例是一个简单的RESTful API,允许用户创建、读取、更新和删除用户信息。我们使用了基于HTTP Basic认证的安全性保障。
首先,我们需要定义一个User类,用来表示用户信息:
代码语言:javascript复制public class User {
private Long id;
private String username;
private String password;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
接下来,我们需要创建一个UserService类,用来处理用户信息的增删改查操作。这里我们只是简单地使用了一个List来存储用户信息:
代码语言:javascript复制@Service
public class UserService {
private static List<User> users = new ArrayList<>();
public void addUser(User user) {
users.add(user);
}
public List<User> getUsers() {
return users;
}
public User getUserById(Long id) {
for (User user : users) {
if (user.getId().equals(id)) {
return user;
}
}
return null;
}
public void updateUser(User user) {
for (int i = 0; i < users.size(); i ) {
if (users.get(i).getId().equals(user.getId())) {
users.set(i, user);
return;
}
}
}
public void deleteUser(Long id) {
users.removeIf(user -> user.getId().equals(id));
}
}
然后,我们需要创建一个RESTful API来处理用户信息的增删改查操作。这里我们使用了Spring MVC框架:
代码语言:javascript复制@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping
public List<User> getUsers() {
return userService.getUsers();
}
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
return userService.getUserById(id);
}
@PostMapping
public void addUser(@RequestBody User user) {
userService.addUser(user);
}
@PutMapping("/{id}")
public void updateUser(@PathVariable Long id, @RequestBody User user) {
user.setId(id);
userService.updateUser(user);
}
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable Long id) {
userService.deleteUser(id);
}
}
最后,我们需要定义一个SecurityConfig类,用来配置安全性保障。这里我们使用了HTTP Basic认证,并禁用了CSRF防护:
代码语言:javascript复制@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("{noop}password").roles("USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers(HttpMethod.GET, "/users/**").permitAll()
.antMatchers(HttpMethod.POST, "/users/**").hasRole("USER")
.antMatchers(HttpMethod.PUT, "/users/**").hasRole("USER")
.antMatchers(HttpMethod.DELETE, "/users/**").hasRole("USER")
.and()
.httpBasic()
.and()
.csrf()
.disable();
}
}
在这个例子中,我们允许所有用户访问“/users”和“/users/{id}”页面,但是只有具有“ROLE_USER”角色的用户才能进行用户信息的增删改操作。如果用户没有登录,则会弹出一个HTTP Basic认证对话框。如果用户认证失败,则会返回一个HTTP 401错误。我们还禁用了CSRF防护,以简化示例。