401在authenticationManager.authenticate()上未经授权(Spring Security)

克莱恩

401在注册时尝试登录时产生的未经授权的效果很好。

在调试期间,我发现在authenticationManager.authenticate()at方法UserController被调用的那一行给出了响应我注意到的另一件事是,由于某些原因,在使用JPA存储库而不是DAO时,我没有遇到此问题我正在使用PostgreSQL

在此处输入图片说明

这是以下情况下对应方法的代码UserController

    @RequestMapping(path = "/auth", method = RequestMethod.POST)
    @ResponseStatus(value = HttpStatus.OK)
    public AuthResponse authenticate(@RequestBody AuthRequest req){
        authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(req.getUsername(), req.getPassword()));
        String token = jwtService.generateToken(req.getUsername());
        return new AuthResponse(token);
    }

JwtFilter.doFilterInternal():

    @Override
    protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
        String authorizationHeader = httpServletRequest.getHeader("Authorization");
        String jwtToken = null;
        String username = null;
        if (authorizationHeader != null && authorizationHeader.startsWith("Bearer")) {
            jwtToken = authorizationHeader.substring(7);
            username = jwtService.extractUsername(jwtToken);
        }
        if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
            UserDetails userDetails = userDetailsService.loadUserByUsername(username);
            if (jwtService.validateToken(jwtToken, userDetails.getUsername())) {
                UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken(
                        userDetails, null, userDetails.getAuthorities()
                );
                usernamePasswordAuthenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(httpServletRequest));
                SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken);
            }
        }
        filterChain.doFilter(httpServletRequest, httpServletResponse);
    }

SecurityConfig.configure():

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable().cors().disable()
                .authorizeRequests()
                .anyRequest().permitAll()
                .and().addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class)
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and().httpBasic();
    }

UserService.loadUserByUsername():

@Service
public class UserService implements IUserService, UserDetailsService {
    @Override
    public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
        User userByName = userDao.getUserByUsername(s);
        return new org.springframework.security.core.userdetails.User(userByName.getUsername(), userByName.getPassword(), userByName.getAuthorities());
    }
}

DAO查询:

@Override
public User getUserByUsername(String username) {
    return jdbcTemplate.queryForObject("SELECT * FROM user_table WHERE username = ?", new Object[]{username}, User.class);
}
克莱恩

问题是查询未返回预期值。我变了:

 @Override
public User getUserByUsername(String username) {
    List<User> userList = jdbcTemplate.query("SELECT * FROM user_table WHERE username = ?", new Object[]{username}, (resultSet,i) -> {
        System.out.println(1);
        return new User(resultSet.getInt("id"),
                resultSet.getString("username"),
                resultSet.getString("password"),
                resultSet.getString("role"));
    });
    return userList.get(0);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spring Security的AuthenticationManager中UserDetailsService的作用是什么?

Spring Security针对未经授权的请求阻止CSS资源

Spring Security匿名401而不是403

Spring Boot Security不会引发401未经授权的异常,但找不到404

Spring Security AuthenticationManager设置了一个PasswordEncoder

如何在Spring Boot上修复“错误401未经授权”

如何配置Spring Security AuthenticationManager与JdbcUserDetailsManager一起使用?

Spring Security抛出未经授权而不是重定向到登录

Spring Security上下文未在AuthenticationManager.authenticate上更新

Spring Security中的401未经授权的错误

尽管提供了正确的凭据,Spring Security仍会返回401未经授权的代码

为什么Spring Security antmatcher总是未经授权返回?

Spring Security默认配置总是抛出401

Java Spring 401未经授权

Spring Boot Security Config-必须指定authenticationManager

Spring Security 401在不安全的端点上未经授权

Spring Security-401未经授权的访问

spring-security java config:如何配置多个AuthenticationManager实例

Spring Security:AuthenticationManager.authenticate()执行什么功能

401未经API密钥在Google Photos API上未经授权

OAuth 401未经授权

使用curl测试时,Grails Spring Security Rest未经授权(401)

Spring Security REST-单元测试因HttpStatusCode 401未经授权而失败

Spring Security的许可证全部未经授权

在Grails应用中使用Spring Security Rest插件调用登录时出现401未经授权的错误

401未经授权-例外

具有PreAuthenticationFilter的Spring Security AnonymousAuthFilter允许未经授权的请求

Couchbase 401 未经授权

AJAX 401(未经授权)