默认情况下如何拒绝访问所有URL?

时间:2018-07-17 15:35:14

标签: java spring spring-boot spring-security

在定义新的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"); 的访问权限(因为尚未配置)!

3 个答案:

答案 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明确允许请求