我有这个来验证方法和资源以及角色,但我不能相信这部分需要在代码中设置,存在一个查询表的方法吗?
例如
table: user_access <br>
campos: url , path <br>
method="HttpMethod.GET" <br>
path="/api/clientes/page/**"
我有这个密码:
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
//implementar reglas de seguridad para los end points
//por el lado de oauth
@Override
public void configure(HttpSecurity http) throws Exception {
//reglas especificate al mas generico
**//I Dont like this part and i try to creat it dinamicly**
http.authorizeRequests().antMatchers(HttpMethod.GET,"/api/clientes","/api/clientes/page/*","/api/clientes/img/*","/images/**").permitAll()
.antMatchers(HttpMethod.GET,"/api/clientes/form/").hasAnyRole("ADMIN","SUPER_ADMIN")
.antMatchers(HttpMethod.POST,"/api/clientes/uploads").hasAnyRole("ADMIN","SUPER_ADMIN")
.antMatchers(HttpMethod.POST,"/api/clientes").hasAnyRole("ADMIN","SUPER_ADMIN")
.antMatchers(HttpMethod.DELETE,"/api/clientes/{id}").hasRole("SUPER_ADMIN")
.antMatchers(HttpMethod.GET,"/api/clientes/{id}").hasRole("SUPER_ADMIN")
.anyRequest().authenticated()
.and().cors().configurationSource(cousConfigurationSource()); //error en el cors con esto se arregla para la pagina de angular
}
//importante no tomar cors.reactive
@Bean
public CorsConfigurationSource cousConfigurationSource() {
CorsConfiguration config = new CorsConfiguration();
config.setAllowedOrigins(Arrays.asList("http://localhost:4200"));
config.setAllowedMethods(Arrays.asList("GET","POST","PUT","DELETE","OPTIONS")); //se podria poner * para todo
config.setAllowCredentials(true);
config.setAllowedHeaders(Arrays.asList("Content-Type","Autorization"));
UrlBasedCorsConfigurationSource source= new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return source;
}
//filtro //seleccionar spring Framework
@Bean
public FilterRegistrationBean<CorsFilter> corsFilter(){
FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<CorsFilter>(new CorsFilter(cousConfigurationSource()));
bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
return bean;
}
有没有办法让它更有活力?
2条答案
按热度按时间krugob8w1#
希望下面能有所帮助,
您可以这样做,但在应用程序启动时它会工作,您可以创建一个表来保存所有必需的配置,并且在应用程序开始运行时,您可以编写代码来读取所有配置的值并使用它们来配置
HttpSecurity
.例如:
然后,只需在从数据库中获取记录后进行配置,如下所示:
唯一的限制是,您可以在应用程序启动之前预先配置所有访问,如果需要反映用户访问记录的任何更改,则必须重新启动服务器。
lpwwtiir2#
我认为@preauthorize可以使您的验证更加动态:您可以为您的控制器进行验证,并使用spel(spring表达式语言)来组合更多的案例。要启用@preauthorize,您需要在websecurityconfig中进行配置
在我的示例中,“超级管理员”或拥有资源的用户可以从请求中访问数据(获取用户详细信息)。希望这能对你有所帮助。
spel引用文档:spring表达式语言,enable@preauthorize引用:spring方法安全简介