当前位置: 首页 > 知识库问答 >
问题:

403仅限定制UserDetails服务的Spring Security禁止[重复]

游高杰
2023-03-14

我在Spring Security的spring boot项目中有以下文件。当我使用inMemoryAuthentication时,它是有效的,但当我使用custom UserDetails服务时,它不起作用。Custom UserDetailsService类被调用,但它仍然给出403(当我试图访问/user时),但它适用于打开的URL(/usr)。

import org.springframework.security.core.userdetails.User

@Service
public class UserDetailsServiceImpl implements UserDetailsService {

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        //not using parameter which is being passed as trying to figure out the problem first.

        UserDetails user = User.withUsername("abc").password("abc").authorities("ADMIN").build();
        return user;
        
    }

}
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    UserDetailsServiceImpl userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(getPasswordEncoder());
//      auth.inMemoryAuthentication().withUser("abc").password("abc").roles("ADMIN");
    }

    @Bean
    public PasswordEncoder getPasswordEncoder() {
        return NoOpPasswordEncoder.getInstance();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
        .antMatchers("/api/user").hasRole("ADMIN")
        .antMatchers("/").permitAll()
        .and().formLogin();
    }

}
@RestController
@RequestMapping("/api")
public class UserController {

    @GetMapping("/usr")
    public ResponseEntity<String> getOpenResponse() {
        return ResponseEntity.ok("You are accessing open url");
    }

    @GetMapping("/user")
    public ResponseEntity<String> getSecuredResponse() {
        return ResponseEntity.ok("You are accessing secured path");
    }

}

我做错什么了?我错过什么了吗?

共有1个答案

范飞翰
2023-03-14

问题在于:

UserDetails user = User.withUsername("abc").password("abc").authorities("ADMIN").build();

您将用户权限设置为“ADMIN”,但在SecurityConfig类中,您希望用户拥有一个角色“ADMIN”,这实际上是“role_ADMIN”权限的快捷方式:

http.authorizeRequests()
    .antMatchers("/api/user").hasRole("ADMIN")

要解决此问题,您应该定义用户的角色:

User.withUsername("abc").password("abc").roles("ADMIN")
 类似资料:
  • 在一段时间内,通过HTTPS与我们的服务器的通信工作得很好。 上周提供商更改了一些东西,从现在开始,我总是得到403错误。 我使用最新的OpenSSL DLLs V0.9.8 我已将UserAgent更改为“Mozilla/5.0(Windows NT 10.0)” SSL方法为“SSLVSSLV23” SSL模式为“SSLMClient” 什么都帮不上忙。:( 这是我得到的日志:

  • 我有一个以前使用 Spring Boot 1 运行测试的应用程序,并且已更新到 2.0.9.RELEASE。 Spring Security现在有问题。我知道情况是这样的,因为如果我删除 测试仍然成功。测试基本上是去一个项目控制器'Home计数器',然后从那里去一个服务,并使用一个雷斯特模板来执行各种操作。实际上,这是一个不同的应用程序,如果我从头开始编写它,我可能会做一个wiremck,但现在这

  • 问题内容: 我正在遵循此页面上的教程,但是在运行应用程序并尝试进行搜索时,我一直收到403 Forbidden错误。 我在https://console.developers.google.com/页面上启用了Youtube Data API v3,并创建了一个Android API密钥。 有什么建议?谢谢。 问题答案: 我已经通过创建浏览器密钥而不是android密钥解决了该问题。浏览器密钥不需

  • 我是Admob的新手。最近4个月前,我在我的两个应用程序上使用Admob放置了一些广告,但不幸的是,我收到了一条关于Admob放置到我的Admob帐户的广告服务限制的消息。我想知道如何防止这些限制,有没有任何代码,从同一用户连续两次点击后,广告将消失一段时间,为该特定的用户。这样有助于防止发球的限制?

  • 我在一个网站上工作,跟踪待办事项列表,并从服务器上提取它。下面有两个示例ajax调用。任务GET调用工作正常,但添加POST不工作。出于某种原因,它给我一个403禁止的错误,结果,不执行代码。 在Django框架中发出ajax Post请求时,我看到了403禁止的错误,我阅读了@yohn发布的链接,但我不理解如何实现这个解决方案。