org.springframework.security.core.userdetails.UsernameNotFoundException: admin

本文介绍如何在Spring Security中处理用户认证失败的情况,并提供了一个具体的实现案例,展示了如何通过重写UserDetailsService接口来解决UsernameNotFoundException异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

找不到用户 

org.springframework.security.core.userdetails.UsernameNotFoundException: admin

你需要重写这个接口 

public interface UserDetailsService {
    UserDetails loadUserByUsername(String var1) throws UsernameNotFoundException;
}

-===============================================================

重写如下

@Override
public UserDetails loadUserByUsername(String phone) throws UsernameNotFoundException{
    User user = userService.findByPhone(phone);

    if(user == null) {
        throw new UsernameNotFoundException("Invalid User");
    }
    else {
        Set<GrantedAuthority> grantedAuthorities = user.getRoles()
                .stream()
                .map(role -> new SimpleGrantedAuthority(role.getName()))
                .collect(Collectors.toSet());

        return new org
                .springframework
                .security
                .core
                .userdetails
                .User(user.getPhone(), user.getPassword(), grantedAuthorities);
    }
}
C:\Users\86133\IdeaProjects\tools\src\main\java\com\org\example\tools\security\JwtAuthenticationFilter.java:36:61 java: 找不到符号 符号: 方法 validateToken(java.lang.String) 位置: 类型为com.org.example.tools.security.JwtTokenProvider的变量 jwtTokenProvider // src/main/java/com/org/example/tools/security/JwtAuthenticationFilter.java package com.org.example.tools.security; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.springframework.web.filter.OncePerRequestFilter; import java.io.IOException; @Component @RequiredArgsConstructor public class JwtAuthenticationFilter extends OncePerRequestFilter { private final JwtTokenProvider jwtTokenProvider; private final UserDetailsService userDetailsService; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { try { String jwt = getJwtFromRequest(request); if (StringUtils.hasText(jwt) && jwtTokenProvider.validateToken(jwt)) { String username = jwtTokenProvider.getUsernameFromToken(jwt); if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) { UserDetails userDetails = userDetailsService.loadUserByUsername(username); UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( userDetails, null, userDetails.getAuthorities() ); authentication.setDetails( new WebAuthenticationDetailsSource().buildDetails(request) ); SecurityContextHolder.getContext().setAuthentication(authentication); } } } catch (Exception ex) { logger.error("无法设置用户认证", ex); } filterChain.doFilter(request, response); } private String getJwtFromRequest(HttpServletRequest request) { String bearerToken = request.getHeader("Authorization"); if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) { return bearerToken.substring(7); } return null; } }
最新发布
08-03
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值