首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Boot安全配置HttpSecurity

Spring Boot安全配置HttpSecurity
EN

Stack Overflow用户
提问于 2021-04-03 15:44:48
回答 3查看 73关注 0票数 1

为了授权请求,我们覆盖了configure(HttpSecurity)方法,我们在其中提到了访问我们想要的角色的API。但是我们没有提到的API可以在不登录的情况下访问。为什么会出现这种行为?

我没有为API编写permitAll(),为什么这是默认行为?

代码语言:javascript
复制
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/admin").hasRole("ADMIN")
                .antMatchers("/user").hasAnyRole("ADMIN", "USER")
                .antMatchers("/").hasRole("USER")
                .and()
            .formLogin();
    }
}

在这段代码中,admin API可以由管理员角色访问,user API可以由管理员和用户角色访问,/ API可以由用户角色访问,还有一个我没有提到的/student接口,我不需要登录就可以访问它。

问题是为什么我没有为学生应用编程接口编写permitAll()方法。

EN

回答 3

Stack Overflow用户

发布于 2021-04-03 17:17:05

将以下代码行:.antMatchers("/").hasRole("USER")更改为:.anyRequest().hasRole("USER")

票数 0
EN

Stack Overflow用户

发布于 2021-04-03 18:06:26

仅检查已配置的URL。如果不配置URL,则根本不会对其进行检查。

因此,您应该添加一个检查所有其他URL的配置,请参见Spring Security Reference

11.2。使用FilterSecurityInterceptor授权HttpServletRequest

..。

受保护无效配置(HttpSecurity http)抛出异常{ http // ... .authorizeRequests(authorize -> authorize 1.mvcMatchers(“/->/**”,"/signup",“ADMIN”).permitAll()2 .mvcMatchers("/admin/**").hasRole("ADMIN") 3.permitAll.mvcMatchers(‘DBA’)“)4 .anyRequest().denyAll()5 );}

%1指定了多个授权规则。每个规则都是按照它们声明的顺序来考虑的。

2我们指定了多个任何用户都可以访问的URL模式。具体地说,如果URL以"/resources/“开头、等于"/signup”或等于"/about“,则任何用户都可以访问请求。

3任何以"/admin/“开头的网址都将被限制为具有"ROLE_ADMIN”角色的用户。您将注意到,由于我们调用的是hasRole方法,因此不需要指定"ROLE_“前缀。

4任何以"/db/“开头的网址都要求用户同时拥有"ROLE_ADMIN”和"ROLE_DBA“。您将注意到,由于我们使用的是hasRole表达式,因此不需要指定"ROLE_“前缀。

5拒绝访问尚未匹配的任何URL。如果您不想意外忘记更新授权规则,这是一个很好的策略。

票数 0
EN

Stack Overflow用户

发布于 2021-04-07 11:19:34

为了保护未在configure方法中配置的接口,必须添加一行.anyRequest().denyAll()

代码语言:javascript
复制
 @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/admin").hasRole("ADMIN")
                .antMatchers("/user").hasAnyRole("ADMIN", "USER")
                .antMatchers("/").hasRole("USER")
                .anyRequest().denyAll()
                .and()
            .formLogin();
    }
}

对于每个要保护但未在configure方法中进行配置的请求

代码语言:javascript
复制
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests(authorize -> authorize
            .anyRequest().authenticated()
        );
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66928827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档