Безопасность SpringBoot: ошибка при отображении страницы входа в Angular 8 - PullRequest
0 голосов
/ 26 февраля 2020

Я реализую функциональность входа в систему для моего проекта. Во внешнем интерфейсе я использую 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>

плохо знакомы с вопросами безопасности, пожалуйста, помогите

1 Ответ

0 голосов
/ 26 февраля 2020

Я предполагаю, что ваше angular приложение вообще не будет отображаться при вызове. Вам не следует пытаться запускать две разные службы на одном и том же порту на одном и том же компьютере, поскольку ваш браузер не сможет различать, какая служба должна получать ваши запросы.

В настоящее время вы отправляете GET-запрос на ваш API (URL: * / login), который вы, возможно, не установили. Поэтому вы получите 404 в сообщении об ошибке, но ожидаете, что запрос будет направлен в ваше приложение angular, чтобы показать ваше приложение (например, маску входа).

...