如何在Spring Security中配置API和UI以防止未经授权的请求

ijnw1ujt  于 2023-03-02  发布在  Spring
关注(0)|答案(1)|浏览(188)

我是Spring Security的新手,所以请原谅我不够清楚,我有一个带有Java配置的Spring启动项目。
该项目有一个带有登录表单的UI (my-app) 和一个Rest API (my-app/api)。我想用Spring Security保护这两个组件,并且我成功地保护了UI部分。当未经授权的用户尝试请求禁用的资源时,会被重定向到登录页面。我的问题是当我尝试保护Rest API时。使用以下设置,我保护了UI部分。

http
            .authorizeRequests()
            .antMatchers("/login", "/about", "/resource/**").permitAll()
            .anyRequest().authenticated()
        .and()
            .formLogin() 
            .loginPage("/login") 
            .permitAll()
            .failureUrl("/login?error=true")
        .and()
            .logout()
            .logoutSuccessUrl("/login")

用户界面得到了很好的保护,注销和登录错误重定向到登录页面,唯一的警告是禁止访问API,返回登录HTML文本。

http.antMatcher("/my-app/**")
            .authorizeRequests().anyRequest().authenticated();

只有API受到保护,在任何未经授权的请求下,它会返回一个带有错误的JSON(这是所需的行为),并且不会打印redirect/html文本。我知道我的API已经通过身份验证访问,因为我使用了一个Bearer令牌(Oauth2密码授予类型),并且运行良好。
我在混合两种设置以获得所需结果时遇到了问题。
欢迎提出任何建议。

mwyxok5s

mwyxok5s1#

您可以使用中定义的多个http安全配置
https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#multiple-httpsecurity

相关问题