Spring 如何解决邮递员401未经授权的错误
我正在开发用于在我的站点中注册用户的后端部分 我遇到的问题是,当我想测试我的代码是否在postman中工作时,我会遇到以下错误: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
{
"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");
}