Я реализую функциональность входа в систему для моего проекта. Во внешнем интерфейсе я использую Angular 8. Я реализовал таким образом, чтобы Angular 8 и Springboot работали на том же порту 8090.
У меня есть маршрутизация как
const routes: Routes = [
{ path: '', component: EmployeeComponent,canActivate:[AuthGaurdService] },
{ path: 'addemployee', component: AddEmployeeComponent,canActivate:[AuthGaurdService]},
{ path: 'login', component: LoginComponent },
{ path: 'logout', component: LogoutComponent,canActivate:[AuthGaurdService] },
];
Java сторона: я уже установил его, чтобы разрешить все / запрос входа
WebSecurityConfig
@Override
protected void configure(HttpSecurity httpSecurity)
throws Exception
{
// We don't need CSRF for this example
httpSecurity.csrf().disable()
// dont authenticate this particular request
.authorizeRequests().antMatchers("/login").permitAll()
.antMatchers(HttpMethod.OPTIONS, "/**").permitAll().anyRequest().authenticated().and().
// make sure we use stateless session; session won't be used to
// store user's state.
exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint).and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
// Add a filter to validate the tokens with every request
httpSecurity.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
}
}
, но все еще при вызове localhost: 8090 / login, я сталкиваюсь в браузере
Страница ошибки Whitelabel Это приложение не имеет явного сопоставления для / error, поэтому вы видите это как запасной вариант.
Ср 26 февраля 14:42:50 IST 2020 Произошла непредвиденная ошибка ( тип = не найдено, статус = 404). Нет доступных сообщений
В бэкэнде я сталкиваюсь с
2020-02-26 14: 30: 44.045 WARN 5184 --- [nio-8090-exe c -1] org.freelancing.utils.JwtRequestFilter: токен JWT не начинается со строки носителя 2020-02-26 14: 42: 49.945 WARN 5184 --- [nio-8090-exe c -3] org.freelancing .utils.JwtRequestFilter: токен JWT не начинается со строки носителя 2020-02-26 14: 42: 51.287 WARN 5184 --- [nio-8090-exe c -4] org.freelancing.utils.JwtRequestFilter: токен JWT не начинается с Bearer String
Я думаю, что это происходит в этом блоке
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
FilterChain chain)
throws ServletException,
IOException
{
final String requestTokenHeader = request.getHeader("Authorization");
String username = null;
String jwtToken = null;
// JWT Token is in the form "Bearer token". Remove Bearer word and get
// only the Token
if (requestTokenHeader != null && requestTokenHeader.startsWith("Bearer "))
{
jwtToken = requestTokenHeader.substring(7);
try
{
username = jwtTokenUtil.getUsernameFromToken(jwtToken);
}
catch (IllegalArgumentException e)
{
System.out.println("Unable to get JWT Token");
}
catch (ExpiredJwtException e)
{
System.out.println("JWT Token has expired");
}
}
else
{
logger.warn("JWT Token does not begin with Bearer String");
}
// Once we get the token validate it.
if (username != null && SecurityContextHolder.getContext().getAuthentication() == null)
{
UserDetails userDetails = this.jwtUserDetailsService.loadUserByUsername(username);
// if token is valid configure Spring Security to manually set
// authentication
if (jwtTokenUtil.validateToken(jwtToken, userDetails))
{
UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken =
new UsernamePasswordAuthenticationToken(userDetails, null,
userDetails.getAuthorities());
usernamePasswordAuthenticationToken
.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
// After setting the Authentication in the context, we specify
// that the current user is authenticated. So it passes the
// Spring Security Configurations successfully.
SecurityContextHolder.getContext()
.setAuthentication(usernamePasswordAuthenticationToken);
}
}
chain.doFilter(request, response);
}
, что мне нужно, это сделать страницу входа, а затем взять учетные данные и создать заголовок .Но даже при нажатии localhost: 8090 / login запрашивается заголовок в вышеприведенном коде, поскольку заголовок равен null, и я получаю сообщение об ошибке:
Токен JWT не начинается со строки Bearer
LoginComponent
<div class="container">
<div>
User Name : <input type="text" name="username" [(ngModel)]="username">
Password : <input type="password" name="password" [(ngModel)]="password">
</div>
<button (click)=checkLogin() class="btn btn-success">
Login
</button>
</div>
плохо знакомы с вопросами безопасности, пожалуйста, помогите