我有一个名为student的表,列名,密码,域名。 我的控制器中有一个方法,它为学生提供了获取一些资源的令牌。
@CrossOrigin(origins = "*")
@RequestMapping(value = "/getToken")
public String provideToken() {
return "tokenvalue"
}
在数据库中,有多个学生和多个学生有不同的域调用上述方法。例如。 的 something.com/provideToken?username ="用户"&安培;密码="通过"
在不同的域中,有一个页面调用上面的url。 现在,我如何确保只有数据库中的那些域可以访问上面的provideToken函数。
public static void main(String[] args) throws InterruptedException {
SpringApplication.run(Application.class, args);
}
@Bean
public WebMvcConfigurer corsConfigurer() {
List<User> allUsers = userDao.findAll();
List<String> originList = new ArrayList<>();
for(User user: allUsers) {
originList.add(user.getDomainName());
}
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
String[] origins = new String[originList.size()];
origins = originList.toArray(origins);
registry.addMapping("/getToken").allowedOrigins(origins);
}
};
}
答案 0 :(得分:2)
您可以对每个映射使用a WebMvcConfigurer
for来源的编程配置:
@SpringBootApplication
@RestController
public class MySpringBootApplication {
@Autowired
private MyDatabase myDatabase;
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
String[] origins = myDatabase.getAllowedOriginsForGetToken(); // example
registry.addMapping("/getToken").allowedOrigins(origins);
}
};
}
...
如您所见,它允许您转到数据库(或任何其他来源)以获取原始信息。