java Spring Security -如何阻止对除少数按角色列出的url之外的任何url的访问?

n3h0vuf2  于 2023-01-11  发布在  Java
关注(0)|答案(4)|浏览(126)

因此,我有一个Web应用程序,它有三组不同的角色。其中一组角色应该允许任何人查看,即使他们没有登录。还有一组页面,用户必须登录才能查看,但如果他们具有“候选人”角色,则无法访问。最后,“候选人”角色可能只能查看/candidate/ID中的页面
基本上,是否有一种方法可以阻止对除下面列出的链接之外的任何URL(基本上为“/**”)的访问?或者,我是否需要指定每个链接,例如/dashboard /profile

http.authorizeRequests()
            .antMatchers("/").permitAll()
            .antMatchers("/index").permitAll()
            .antMatchers("/static/**").permitAll()
            .antMatchers("/assets/**").permitAll()
            .antMatchers("/register").permitAll()
            .antMatchers("/skillRequest/**").permitAll()
            .antMatchers("/skillRequest/skillFormUpdate/**").permitAll()
            .antMatchers("/password/reset").permitAll()
            .antMatchers("/password/reset/complete").permitAll()
            .antMatchers("/email/verify").permitAll()
            .antMatchers("/view/**").permitAll()
            .antMatchers("/embed/**").permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .defaultSuccessUrl("/dashboard", false) //Force user to always go to the home page.  
//                .successHandler(successHandler())
            .permitAll()
            .and()
            .httpBasic()
            .and()
            .logout()
            .permitAll();
ibrsph3r

ibrsph3r1#

为了达到我的目的我只需要加上
.antMatchers("/**").not().hasAuthority("ROLE_CANDIDATE")
在我想要从匹配器中排除的任何URL之后

.antMatchers("/").permitAll()
            .antMatchers("/index").permitAll()
            .antMatchers("/static/**").permitAll()
            .antMatchers("/assets/**").permitAll()
            .antMatchers("/register").permitAll()
            .antMatchers("/skillRequest/**").permitAll()
            .antMatchers("/skillRequest/skillFormUpdate/**").permitAll()
            .antMatchers("/password/reset").permitAll()
            .antMatchers("/password/reset/complete").permitAll()
            .antMatchers("/email/verify").permitAll()
            .antMatchers("/view/**").permitAll()
            .antMatchers("/embed/**").permitAll()
0s0u357o

0s0u357o2#

我们可以用Spring安全标签
例如:

<sec:intercept-url pattern="/url/domestic/*" access="!hasAuthority('systemAccessRole')"/>

如上所述,使用!(not)运算符。

zrfyljdw

zrfyljdw3#

.antMatchers("/**").denyAll()

我发现把上面这行作为最后一个antmatchers对我很有效。它阻塞了所有声明在以前的antmatchers上的API

.antMatchers("/index").permitAll()
.antMatchers("/assets/**").permitAll()
.antMatchers("/candidate/*").hasAuthority("ROLE_CANDIDATE")
.antMatchers("/**").denyAll()
.anyRequest().authenticated()
myzjeezk

myzjeezk4#

不如这样:

httpSecurity.httpBasic().and().
authorizeRequests().
antMatchers("/").hasRole("USER").
antMatchers("/public/**").permitAll().
antMatchers("/**").denyAll().
and().formLogin();

相关问题