sla*_*dan 14 java spring spring-security spring-boot
在定义新的Spring引导REST资源时,我倾向于忘记为其url模式创建spring安全配置.
默认情况下,如何拒绝访问所有URL,并且只允许访问明确配置的URL模式?(我.hasRole用来允许访问)我想避免尽可能多的意外安全漏洞.
比方说,我有三个REST资源:/jobs,/desks和/salary.我当前的代码可能如下所示:
http.authorizeRequests()
.antMatchers(HttpMethod.GET, "/jobs")
.hasRole("my_user")
.antMatchers(HttpMethod.GET, "/desks")
.hasRole("my_user");
Run Code Online (Sandbox Code Playgroud)
但目前,/salary每个人都可以访问url (因为它尚未配置)!
ach*_*áin 10
Spring的基于表达式的访问控制有一个denyAll总是求值的表达式false.
因此,您可以使用此denyAll方法拒绝访问所有内容,然后可能允许通过以下方式访问某个URL hasRole:
http.authorizeRequests().antMatchers("/admin/**").access("hasRole('ADMIN')").antMatchers("/**").denyAll();
Run Code Online (Sandbox Code Playgroud)
因此,例如,这将允许具有ADMIN访问权限的用户访问以/admin.开头的任何页面.然后它将拒绝访问所有其他页面.请注意,顺序很重要,就像您.antMatchers("/**").denyAll() 先输入一样,它将拒绝所有访问并忽略表达式的其余部分.
或者,您可以使用permitAll()某个URL模式:
http.authorizeRequests().antMatchers("/users/**").permitAll().antMatchers("/**").denyAll();
Run Code Online (Sandbox Code Playgroud)
请注意,您可能还需要允许访问某种登录方式,因此系统可以让某人使用特定角色登录,因此要将它们组合在一起,并允许每个人尝试登录,只有管理员用户才能访问管理页面并拒绝所有其他人,然后像:
http.authorizeRequests().antMatchers("/login").permitAll().antMatchers("/admin/**").access("hasRole('ADMIN')").antMatchers("/**").denyAll();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1734 次 |
| 最近记录: |