Bas*_*ieh 34 spring spring-mvc spring-security
我从事内容管理系统,有五个像以下一样的antMatchers:
http.authorizeRequests()
.antMatchers("/", "/*.html").permitAll()
.antMatchers("/user/**").hasRole("USER")
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/admin/login").permitAll()
.antMatchers("/user/login").permitAll()
.anyRequest().authenticated()
.and()
.csrf().disable();
Run Code Online (Sandbox Code Playgroud)
这意味着访问者可以在根路径(/*)上看到所有站点,用户只能看到(/ user),管理员只能看到(/ admin),并且有两个登录页面用于用户,另一个用于管理员.
代码似乎工作正常,除了管理部分 - 它不起作用但返回访问被拒绝异常.
Boh*_*rdt 66
我认为这个问题是在为了你的规则:
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/admin/login").permitAll()
Run Code Online (Sandbox Code Playgroud)
规则的顺序很重要,应该首先采用更具体的规则.现在开始的所有内容/admin都需要具有ADMIN角色的经过身份验证的用户,甚至是/admin/login路径(因为/admin/login已经与/admin/**规则匹配,因此忽略第二个规则).
因此,登录页面的/admin/**规则应该在规则之前.例如
.antMatchers("/admin/login").permitAll()
.antMatchers("/admin/**").hasRole("ADMIN")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40396 次 |
| 最近记录: |