Невозможно сгенерировать токен и маршруты, не имеющие смысла в Spring - PullRequest
0 голосов
/ 02 ноября 2019

Я выполнил около 5 учебных пособий по созданию JWT в загрузке Spring, но безуспешно. В этом всегда что-то не так, что-то не хватает, какие-то переломные изменения, какие-то быки. Я только начал изучать Java - это разочаровывающий опыт, в основном из-за инструментов, обеспечивающих поддержку Java-разработки;IDE, JDK и т. Д., А также Java Security.

После поисков в течение нескольких часов я обнаружил, что ошибка «AuthenticationManager» не может быть введена. Я решил проблему. Теперь мои маршруты сводят с ума, я даже не могу определить проблему.

с почтальоном. Я выполняю 8080 / привет и получаю 404 (маршрут определен, как вы можете видеть). Я отправляю сообщение на localhost: 8080 / api / authenticate / bla, в котором говорится, что статус 500, jwt нетнайдено (маршрут не существует)

Вот код

Это мой контроллер

     @RestController
     public class LoginController {

    @Autowired
    private AuthenticationManager authenticationManager;

    @Autowired
    private JwtUtil jwtTokenUtil;

    @Autowired
    private MyUserDetailsService userDetailsService;

    @GetMapping("/hello")
    public String hello(){
        return "Hello World";
    }

    @RequestMapping(value = "/authenticate", method= RequestMethod.POST)

    public ResponseEntity<?> createAuthenticationToken(@RequestBody AuthenticationRequest authenticationRequest) throws Exception{

        try{
            authenticationManager.authenticate(
            new UsernamePasswordAuthenticationToken(authenticationRequest.getUsername(), authenticationRequest.getPassword() ));

        }catch(BadCredentialsException ex){
            throw new Exception("Nome de usuário ou senha incorretos", ex);
        }

          final UserDetails userDetails = userDetailsService.
            loadUserByUsername(authenticationRequest.getUsername());
            final String jwt = jwtTokenUtil.generateToken(userDetails);

                   return ResponseEntity.ok(new AuthenticationResponse(jwt));
    }

}

Мой фильтр

   public class JwtRequestFilter extends OncePerRequestFilter {

    @Autowired
    private MyUserDetailsService userDetailsService;

    @Autowired
    private JwtUtil jwtUtil;

    @Override
     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {

    final String authorizationHeader = request.getHeader("Authorization");

    String username = null;
    String jwt = null;

    if(authorizationHeader != null && authorizationHeader.startsWith("Bearer ")){
        jwt = authorizationHeader.substring(7);
        username = jwtUtil.extractUsername(jwt);
    }

    if(username != null && SecurityContextHolder.getContext().getAuthentication() == null){

        UserDetails userDetails = this.userDetailsService.loadUserByUsername(username);

        if(jwtUtil.validateToken(jwt, userDetails)){

            UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken(
            userDetails, null, userDetails.getAuthorities());



            usernamePasswordAuthenticationToken
                    .setDetails(new WebAuthenticationDetailsSource().buildDetails(request));

            SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken);



        }

    }
      filterChain.doFilter(request, response);   
}    
}

МойWebSecurityConfigurer

@EnableWebSecurity
public class SecurityConfigurer extends WebSecurityConfigurerAdapter{


    @Autowired
    private MyUserDetailsService myUserDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(myUserDetailsService); //To change body of generated methods, choose Tools | Templates.
    }

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

      http.csrf().disable()
              .authorizeRequests().antMatchers("/authenticate")
              .permitAll().anyRequest().authenticated().and().sessionManagement()
              .sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }



    @Bean
    public PasswordEncoder passwordEncoder(){
           return NoOpPasswordEncoder.getInstance();
    }

     @Bean(name = BeanIds.AUTHENTICATION_MANAGER)
   @Override
   public AuthenticationManager authenticationManagerBean() throws Exception {
       return super.authenticationManagerBean();
   }
}

Если требуется больше кода, пожалуйста, спросите меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...