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

403禁止-带Spring靴的Spring安全

梁季
2023-03-14

我有我的spring boot应用程序,我正在尝试添加Spring Security性,但当我通过postman发出请求时,我不断收到一个403 Forbbiden,联机时我发现我应该在我的配置中添加:“.csrf().disable()”,但它不起作用(如果我在permitAll()中放置路径为:“person/**”的方法,则所有操作都有效)

这是我的代码:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Document("User")
public class User {
    @Id
    private String id;
    private String name;
    private String password;
    private String email;
    private Set<UserRole> roles;
}

public class SecurityConfig extends WebSecurityConfigurerAdapter {
    private final UserDetailsService userDetailsService;
    private final BCryptPasswordEncoder encoder;
  @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(encoder);}

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        log.info("HttpSecurity: {}",http);
        http.authorizeRequests()
                .antMatchers( "/user/saveUser").permitAll()
                .antMatchers("/person/**").hasAnyRole()
                .and().csrf().disable().cors().disable();}
}

public class UserService implements UserDetailsService{
    private final UserRepository userRepo;
    private final BCryptPasswordEncoder passwordEncoder;

    @Override
    public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
        log.info("mail request: {}",email);
        Optional<User> opt = userRepo.findUserByEmail(email);
        log.info("Find user: {}", opt);
        org.springframework.security.core.userdetails.User springUser=null;

        if(opt.isEmpty()) {
            throw new UsernameNotFoundException("User with email: " +email +" not found");
        }else {
            User user =opt.get();
            Set<UserRole> roles = user.getRoles();
            Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
            for(UserRole role:roles) {
                grantedAuthorities.add(new SimpleGrantedAuthority(role.name()));
            }
            springUser = new org.springframework.security.core.userdetails.User(
                    email,
                    user.getPassword(),
                    grantedAuthorities );

        }
        return springUser;
    }

我的用户控制器:

    @RestController
    @RequestMapping("user")
public class UserController {
    private final UserService userService;
    @PostMapping("/saveUser")
    public ResponseEntity<String> saveUser(@RequestBody User user) {
        log.info("Registering User: {}", user);
        userService.saveUser(user);
        return ResponseEntity.ok("registered User");
    }
}

My person controller:(我获取403的方法)@RestController
@RequestMapping(“person”)公共类PersonController{@Autowired PersonService PersonService;@GetMapping(“/getAll”)公共响应属性

这是我第一次使用Spring Security性,我遵循了一个在线教程,但我真的不明白为什么每次我把我的请求放在安全性中,它仍然得到403禁止

共有1个答案

叶允晨
2023-03-14

我认为您可能需要将配置和EnableWebSecurity注释添加到您的SecurityConfig类中,因为没有它们,spring security无法看到您的安全配置。

见参考文件:https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/config/annotation/web/configuration/EnableWebSecurity.html

请注意,自5.7.0-M2以来,Web安全配置适配器(WebSecurity ConfigureAdapter)就被弃用了,因此如果您使用更高版本的spring security,您可以考虑创建一个类型为安全过滤链(SecurityFilterChain)的bean来配置应用程序中的安全性。

 类似资料:
  • 我在Spring实现了WebSocket。一切正常,但最近我决定实施SpringSecurity。 我的MessageBroker看起来像: 我的JS客户看起来像这样: Spring Security配置: 通过我的JS客户端订阅后,我收到: 所以我决定在安全配置中添加此代码: 但在那之后我收到这种错误: 我不知道如何定义这样的bean,所以我创建了以下类: 但在编译期间,我收到这种错误: 我真的

  • 我正在尝试使用Spring security保护我的网站,但我一直收到

  • 我想暂时禁用整个应用程序的Spring Security性,但我总是被403禁止 删除控制器中的@PreAuthorize注释不会给出任何结果。未使用此注释标记的endpoint也会丢弃我 403 禁止 我不需要基本身份验证 我不需要身份验证 我的Spring Security配置:(/,/api/**,/**,**不工作,我总是得到403禁止) 我的一个控制者:

  • 我无法理解从phonegap发送ajax请求时,如果没有使用tomcat处理请求,则返回403错误。如果使用码头嵌入工作冷却。 我的控制器 如何在tomcat中完整记录请求,或者如何从spring修复它。在简单的rest中,客户机工作很酷。 获取返回 主机10.0.0.42:8080连接保持活动接受/x请求-使用com。柠檬酸。planReview用户代理Mozilla/5.0(Linux;U;A

  • 我的第一个Spring开机项目。我确实成功地将其配置为检查身份验证;如果用户/密码错误,则不会调用该方法(状态401 unauthorized),如果正确,则会成功。 现在我已经添加了JSR250的授权,我只得到403访问被拒绝。 WS: 调用时,我会在控制台上看到: EN LDAP LdapUserDetailsImpl[Dn=cn=ivr\u apl\u user,ou=ivr,ou=Apli

  • 我总是得到http状态403。我有以下安全配置: 我无法发布到/api/users/login 2019-10-15 12:25:49.567[0;39m[32mdebug[0;39m[35m7423[0;39m[2m---[0;39m[2m[nio-8080-exec-1][0;39m[36mo.s.web.servlet.dispatcherservlet[0;39m:[2m:[0;39m“e