Request.getheader ("Authorization") Возвращение NULLJAVA

Программисты JAVA общаются здесь
Anonymous
 Request.getheader ("Authorization") Возвращение NULL

Сообщение Anonymous »

Я работаю над отделенным React.js и Java с приложением Spring Boot и только что закончил первую часть бэкэнда. По общему признанию, я не имею твердого понимания весенней безопасности, когда дело доходит до использования JWTS, но я следовал видео с видеоурок и прочитал документы в меру своих возможностей. К сожалению, учебное пособие несколько устарело, и мне пришлось рефакторировать определенные его части, чтобы объяснить деформации. Я, очевидно, допустил ошибку в какой -то момент и не могу понять, что я сделал неправильно. ошибка 403. Это предположило мне, что это была проблема с помощью SecurityConfiguration , поэтому я подтвердил, что конечная точка «/» была в строке разрешения () , и это было. Вот весь мой SecurityConfiguration :

Код: Выделить всё

package com.keyoflife.keyoflife.config;

import com.keyoflife.keyoflife.services.UserDetailsLoader;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.Customizer;
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.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.CorsConfigurationSource;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;

import java.util.Arrays;

@Configuration
@EnableWebSecurity
@Order(Ordered.HIGHEST_PRECEDENCE)
public class SecurityConfiguration {
private final UserDetailsLoader usersLoader;
private final JwtFilter jwtFilter;
public SecurityConfiguration(UserDetailsLoader usersLoader, JwtFilter jwtFilter) {
this.usersLoader = usersLoader;
this.jwtFilter = jwtFilter;
}

@Bean
public PasswordEncoder passwordEncoder() {
//TODO: remove this
//get the hashed version of 'asdfasdf' to save in db
//System.out.println(new BCryptPasswordEncoder().encode("asdfasdf"));
return new BCryptPasswordEncoder();
}
@Bean
public AuthenticationManager authenticationManager(HttpSecurity http, PasswordEncoder passwordEncoder)
throws Exception {
AuthenticationManagerBuilder authenticationManagerBuilder = http.getSharedObject(AuthenticationManagerBuilder.class);
authenticationManagerBuilder.userDetailsService(usersLoader).passwordEncoder(passwordEncoder);
return authenticationManagerBuilder.build();
}

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.csrf(AbstractHttpConfigurer::disable)
.cors(Customizer.withDefaults())
.authorizeHttpRequests(auth -> auth
.requestMatchers("/user-dash").authenticated()
.requestMatchers(HttpMethod.OPTIONS,"/api/auth/**", "/login", "/").permitAll()
)
.sessionManagement(sess -> sess.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.httpBasic(Customizer.withDefaults())
.addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class)
.formLogin((login) -> login
.loginPage("/login")
.failureUrl("/login")
.defaultSuccessUrl("/user-dash"))
/* Logout configuration */
.logout((logout) -> logout
.logoutSuccessUrl("/"))
.build();
}

@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.addAllowedOrigin("http://127.0.0.1:8080");
configuration.setAllowedMethods(Arrays.asList("GET", "POST"));
configuration.setAllowedHeaders(Arrays.asList("Content-Type", "Authorization"));
configuration.setAllowCredentials(true); // for cookies.  bc everyone likes cookies

UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}

}
Далее я прошел через трассировку стека и увидел, что ошибка на самом деле произошла в моей линии jwtfilter в цепочке. Dofilter Line, увиденная здесь в первом if ( ) оператор DoFilterInternal Метод: я опубликую первую часть этого класса, поскольку остальное кажется несущественным, поскольку код не передается первым возвратом:

Код: Выделить всё

protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {

// Get authorization header and validate
final String header = request.getHeader("Authorization");
System.out.println(header);
//ensure header has text and starts with "Bearer "
if (!StringUtils.hasText(header) || (StringUtils.hasText(header) && !header.startsWith("Bearer "))) {
chain.doFilter(request, response); //Access Denied Exception thrown here because header is null
return;
}

//rest of method below

}
Я добавил строку System.out , чтобы увидеть, каково было значение заголовка , и обнаружил, что когда я пытаюсь перейти на LocalHost8080, это значение - это значение » Basic (альфа-нучевая строка) "Но когда я пытаюсь получить доступ к конечной точке/API/Auth/Auth/Login с

Код: Выделить всё

{
"username":"testUser",
"password": "asdfasdf"
}
Используя почтальон с помощью метода тела JSON и Post, я получаю ошибку 401 и нулевой заголовок . Я проверил, что это настоящий пользователь в моем DB. Некоторые из сообщений предлагают добавить конфигурацию CORS, которая у меня есть (см. SecurityConfiguration Code). Другой говорит, что для добавления «авторизации» в линию Getheader в jwtfilter , которую у меня уже есть. Я не хочу, чтобы отсюда идти, и так это мой первый пост. Я читал так много лет, но никогда не застрял, что мне нужно было задать вопрос раньше. Прошу прощения, если я оставил что -то подходящее. Пожалуйста, дайте мне знать, и я редактирую свой вопрос. Я просто не хотел затопить пост посторонним кодом.

Подробнее здесь: https://stackoverflow.com/questions/780 ... rning-null

Вернуться в «JAVA»