API Spring boot 自动重定向到登录页面

Vũ *_*ơng 6 java api spring spring-boot

我正在尝试将 Spring Security 与 Spring Boot Restful API 集成。我的项目的代码如下:

网络安全配置是

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private BCryptPasswordEncoder bCryptPasswordEncoder;

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

        http.csrf().ignoringAntMatchers("/API/**");
        http.authorizeRequests()
        .antMatchers("/API/user/**").permitAll()
        .and().exceptionHandling().accessDeniedPage("/access-denied");

    }
}
Run Code Online (Sandbox Code Playgroud)

用户控制器:

@RestController
@RequestMapping("/API/user")
public class UserRestApiController {

    @Autowired
    UserService userService;

    @RequestMapping(value="/all", method=RequestMethod.GET)
    public ResponseEntity<Collection<Users>> getAll(){
        return new ResponseEntity<Collection<Users>>(userService.getAlluser(), HttpStatus.OK);
    }

    @RequestMapping(value="/{id}", method=RequestMethod.GET)
    public ResponseEntity<Users> getUser(@PathVariable(value="id") int id){
        return new ResponseEntity<Users>(userService.getUser(id), HttpStatus.OK);
    }

    @RequestMapping(value="/delete/{id}", method=RequestMethod.PUT)
    public String deleteUser(@PathVariable(value="id")int id){
        userService.deleteUser(id);
        return "DELETED";
    }

    @RequestMapping(value="/create", method=RequestMethod.POST)
    public ResponseEntity<String> addUser(@Valid @RequestBody Users user){
        return new ResponseEntity<String>(userService.addUser(user), HttpStatus.OK);
    }

    @RequestMapping(value="/update", method=RequestMethod.PUT)
    public ResponseEntity<Object> updateUser(@Valid @RequestBody Users user){
        return new ResponseEntity<Object>(userService.updateUser(user), HttpStatus.OK);
    }
}
Run Code Online (Sandbox Code Playgroud)

用户服务:

public class UserService {

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private PasswordEncoder passwordEncoder;

    public Collection<Users> getAlluser() {
        return userRepository.findAll();
    }

    public Users getUser(int id) {
        return userRepository.getOne(id);
    }

    public void deleteUser(int id) {
        userRepository.deleteById(id);
    }

    public Users updateUser(Users user) {
        //Users u = userRepository.getOne(user.getId());
        Users userUpdate = null;
        if(userRepository.findById(user.getId()) != null) {
             userUpdate = userRepository.save(user);
        }
        return userUpdate;
    }

    public String addUser(Users user) {
        Users tmpUser = userRepository.findByUsername(user.getUsername());
        if(tmpUser == null) {
            userRepository.save(user);
            return "CREATED";
        } else {
            return "EXISTED";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试构建restful API。当我尝试访问链接时,例如:http://localhost:8080/API/user/all

相反,返回 json 值,它重定向到登录页面(我没有配置这样做)。

图片登录页面:登录页面

你能帮我查清这个案子吗?

Dav*_*ham 5

另一种方式,如果您想绕过该表单而不删除 spring-security 依赖项。您可以像这样提供用户名/密码:

a) 用户名​​是 user

b) 密码是一个哈希字符串,您可以在控制台上获取它。例如,它将位于“使用默认安全密码:3322e14e-b18c-42f2-a399-e391bd9909c4”行中


小智 3

与 Spring MVC 不同,REST 服务不应将用户重定向到登录页面,因为它是资源,而不是视图解析器。相反,调用者(例如 Web 浏览器)在收到 HTTP 代码 401 时会将用户重定向到登录页面。

  • 目前,我已经解决了这个问题。看起来默认情况下,当我添加依赖项“spring-boot-starter-security”时,它会自动重定向到登录页面。我必须删除依赖项或登录配置。 (2认同)