春季启动应用程序中的cors

时间:2018-03-26 05:59:15

标签: javascript java spring cors

我有一个名为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);
                }
            };
        }

1 个答案:

答案 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);
            }
        };
    }

...

如您所见,它允许您转到数据库(或任何其他来源)以获取原始信息。