在定义新的spring boot REST资源时,我倾向于忘记同时为其URL模式创建spring安全配置。
默认情况下,我如何才能拒绝访问所有URL,而仅允许访问显式配置的URL模式? (我使用@meeting_results = Admin::Meeting.where("meetings.agenda LIKE ? OR meetings.minutes LIKE ?", "%#{query}%", "%#{query}%").distinct
来允许访问)我想避免尽可能多的意外安全漏洞。
假设我有三个REST资源:.hasRole
,/jobs
和/desks
。我当前的代码可能如下所示:
/salary
但是目前,向所有人提供了对URL http.authorizeRequests()
.antMatchers(HttpMethod.GET, "/jobs")
.hasRole("my_user")
.antMatchers(HttpMethod.GET, "/desks")
.hasRole("my_user");
的访问权限(因为尚未配置)!
答案 0 :(得分:10)
默认情况下,您可以使用以下命令拒绝所有请求:.anyRequest().denyAll()
并使用.hasRole
答案 1 :(得分:9)
Spring的Expression-Based Access Control具有一个 String search = "//input[@class='select2-search__field']";
public void employee() {
Common.selectByVisibletext(search,"Employee", driver);
}
表达式,该表达式的总值为denyAll
。
因此,您可以使用此false
方法拒绝访问所有内容,然后也许允许通过denyAll
访问某些URL:
hasRole
例如,这将允许具有ADMIN访问权限的用户访问以http.authorizeRequests().antMatchers("/admin/**").access("hasRole('ADMIN')").antMatchers("/**").denyAll();
开头的任何页面。然后它将拒绝访问所有其他页面。请注意,顺序很重要,就像您先放置/admin
一样,它会拒绝 all 所有访问,并忽略其余的表达式。
或者,您也可以将.antMatchers("/**").denyAll()
用于特定的网址格式:
permitAll()
仅需注意的是,您可能还需要允许某种登录方式的访问,因此系统可以让某人以特定角色登录,以便将其组合在一起,并允许每个人尝试登录,只有admin用户访问管理页面并拒绝所有其他页面,则类似:
http.authorizeRequests().antMatchers("/users/**").permitAll().antMatchers("/**").denyAll();
答案 2 :(得分:0)
anyRequest().denyAll()
默认情况下拒绝所有请求,
.hasRole
明确允许请求