Spring 如何解决邮递员401未经授权的错误

Spring 如何解决邮递员401未经授权的错误,spring,spring-boot,rest,spring-security,postman,Spring,Spring Boot,Rest,Spring Security,Postman,我正在开发用于在我的站点中注册用户的后端部分 我遇到的问题是,当我想测试我的代码是否在postman中工作时,我会遇到以下错误: { "timestamp": "2020-05-29T13:38:13.114+00:00", "status": 401, "error": "Unauthorized", "message": "Unauthorized", "path": "/adduser" } 我真的不知道这个错误是从哪里来的,下面是我为spring

我正在开发用于在我的站点中注册用户的后端部分

我遇到的问题是,当我想测试我的代码是否在postman中工作时,我会遇到以下错误:

{
    "timestamp": "2020-05-29T13:38:13.114+00:00",
    "status": 401,
    "error": "Unauthorized",
    "message": "Unauthorized",
    "path": "/adduser"
}
我真的不知道这个错误是从哪里来的,下面是我为spring security设置的配置代码:

package com.app.habilitation.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;


@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {


    @Override
    protected void configure (HttpSecurity http) throws Exception {

        http.cors();
        http.csrf().disable();
        http.authorizeRequests().antMatchers("/**").
        fullyAuthenticated().and().httpBasic();
    }

    @Override
    protected void configure (AuthenticationManagerBuilder auth) throws Exception {

        auth.inMemoryAuthentication()
        .withUser("hr")
        .password("{noop}hr").roles("USER");
    }
}
这是我的控制器:

package com.app.habilitation.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import com.app.habilitation.entity.UserEntity;
import com.app.habilitation.service.UserService;

@SpringBootApplication
@RestController
@CrossOrigin(origins = "*")
public class UserController {

    private UserService userService;

    @Autowired
    public UserController (UserService theuserService) {
        userService=theuserService;
    }


    @GetMapping("/")
    public String login() {
        return "authenticaated succesfully";
    }

    @GetMapping("/getUsers") 
    public String getUsers() {
        return "users";
    }

    @PostMapping("/addUser")
    public UserEntity addUser (@RequestBody UserEntity theUser) {

        userService.save(theUser);

        return theUser;
    }
}
我添加了交叉原点以尝试解决我的错误,但它不起作用:(以下是我在控制器中所做的操作:

@CrossOrigin(origins = "*")
这是我使用jpa的dao:

package com.app.habilitation.dao;

import org.springframework.data.jpa.repository.JpaRepository;

import com.app.habilitation.entity.UserEntity;

public interface UserDao extends JpaRepository<UserEntity, Integer> {



}
这是我的用户服务界面:

package com.app.habilitation.service;

import java.util.List;

import com.app.habilitation.entity.UserEntity;



public interface UserService {




    public void save (UserEntity theUser);


}
这是我的userServiceImpl:

package com.app.habilitation.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.app.habilitation.dao.UserDao;
import com.app.habilitation.entity.UserEntity;

@Service
public class UserServiceImpl implements UserService {

    private UserDao userDao;

    @Autowired

    public UserServiceImpl (UserDao theuserDao) {

        userDao = theuserDao;
    }



    @Override
    @Transactional
    public void save(UserEntity theUser) {

        userDao.save(theUser);

    }



}
这是我的application.properties(我将端口8080更改为8484,因为另一个应用程序使用端口8080,对于信息,我使用oracle 10g):


有人能帮我吗?:(

尝试更改AuthenticationManagerBuilder代码,如下所示:-

 @Override
    protected void configure (AuthenticationManagerBuilder auth) throws Exception {

        auth.inMemoryAuthentication()
        .withUser("hr")
        .password("hr").roles("USER");
    }
和设置用户名密码从邮递员相同。用户名hr和密码hr


如果您不知道如何操作,请点击以下链接:-

尝试将@CrossOrigin(origins=“*”)放在每个@getmapping?@postmapping的顶部,并将其保存在当前位置。不,它不起作用:(而不是*尝试放入所有注释。它还不起作用:(我有一个新错误:“status”:500,“error”:“内部服务器错误”,“跟踪”:“org.springframework.dao.InvalidDataAccessResourceUsageException:无法执行语句;SQL[n/a];嵌套异常为org.hibernate.exception.sqlgrammareException:无法执行语句\r\n\tat org.springframework.orm.jpa.vendor.hibernatePadialect.convertHibernateAccessException(HibernateJpaDialect.java:281)\r\n\t将此代码放回,然后尝试从您的邮递员处发送此代码中提到的用户名密码。并在“邮递员”中的请求标题中检查您输入的用户名和密码是否正常。我将username=hr和password=hr放在“邮递员”中,但我已经有相同的错误“状态”:500,“错误”:“内部服务器错误”,“跟踪”:“org.springframework.dao.InvalidDataAccessResourceUsageException:无法执行语句;SQL[n/a];嵌套异常为org.hibernate.exception.sqlgrammareexception:无法执行语句\r\n\t您是否将此代码放回未注释状态?在代码中您的密码似乎不正确hr是的,我删除了注释,如果我的密码正确hr(在我的代码中有{noop}但这只是对spring安全性的一种诠释,即密码是否加密)
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.username=nawfel       
spring.datasource.password=hr


server.port=8484
 @Override
    protected void configure (AuthenticationManagerBuilder auth) throws Exception {

        auth.inMemoryAuthentication()
        .withUser("hr")
        .password("hr").roles("USER");
    }