2016-03-20 6 views
1

Я искал проблему с Spring Security для REST API. И перед тем, как перейти к реализации, я хотел бы получить экспертную консультацию или какой-то примерный проект на github, если он доступен.Spring Security с архитектурой REST

Мое приложение будет основано на REST API. И будет доступ к двум клиентам:

  1. Мобильный телефон
  2. Web

Если создать REST API с пользовательскими страницы входа, то он всегда будет перенаправлен на Web (как в моем понимании). Что, когда я начну потреблять его с помощью мобильного телефона?

.formLogin() 
       .defaultSuccessUrl("/ui/index.html#/app/dashboard") 
       .loginProcessingUrl("/api/upuser/verifyUser") 
       .usernameParameter("username") 
       .passwordParameter("password") 
       .successHandler(new AjaxAuthenticationSuccessHandler(new SavedRequestAwareAuthenticationSuccessHandler())) 
       .loginPage("/ui/index.html#/access/signin") 

Я думаю, что из приведенного выше кода, кажется, совершенно очевидно, что это приложение будет доступен в двух различных местах:

  1. локальный: 8080/API/для API
  2. локальный: 8383/Ui/для WEB (Угловая JS)

Но я буду двигаться как на локальный/апи/& локальный/щ/с помощью Nginx. Таким образом, выше два будет доступно по

  1. LOCALHOST/API/
  2. локальных/щий/

Итак, мой второй вопрос, что будет лучшим способом реализации пружинной безопасности:

  1. Токен проверки подлинности на основе аутентификации
  2. Session Based

Проблема в том, что это служба без состояния, так как мы собираемся реализовать аутентификацию на основе сеанса?

+0

Это то, что я делаю, может быть полезным для вас, чтобы принять правильное решение. Мой webapp обрабатывает только API доступа с аутентификацией на токенах. Он не обрабатывает логин ui и т. Д. Он отправляет только 401 несанкционированный статус клиенту. У меня есть отдельные угловые и мобильные модули. AngularJS будет обрабатывать аутентификацию и перенаправление через HTTP-перехватчик. – JChap

ответ

0

попробовать что-то вроде этого:

You should try this, may be it will help you: 

@Configuration 
@EnableWebSecurity 
@Profile("container") 
public class SOAPSecurityConfig extends WebSecurityConfigurerAdapter { 

@Autowired 
private AuthenticationProvider authenticationProvider; 

@Autowired 
private AuthenticationProvider authenticationProviderDB; 


@Override 
@Order(1) 

protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
    auth.authenticationProvider(authenticationProvider); 
} 


@Order(2) 
protected void ConfigureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
    auth.authenticationProvider(authenticationProviderDB); 
} 

@Override 
    public void configure(WebSecurity web) throws Exception { 
    web 
     .ignoring() 
     .antMatchers("/scripts/**","/styles/**","/images/**","/error/**"); 
    } 

@Override 
public void configure(HttpSecurity http) throws Exception { 
    http 
      .authorizeRequests() 
      .antMatchers("/rest/**").authenticated() 
      .antMatchers("/**").permitAll() 
      .anyRequest().authenticated() 
      .and() 
      .formLogin() 
      .successHandler(new AuthenticationSuccessHandler() { 
       @Override 
       public void onAuthenticationSuccess(
         HttpServletRequest request, 
         HttpServletResponse response, 
         Authentication a) throws IOException, ServletException { 
          //To change body of generated methods, 
          response.setStatus(HttpServletResponse.SC_OK); 
         } 
      }) 
      .failureHandler(new AuthenticationFailureHandler() { 

       @Override 
       public void onAuthenticationFailure(
         HttpServletRequest request, 
         HttpServletResponse response, 
         AuthenticationException ae) throws IOException, ServletException { 
          response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); 
         } 
      }) 
      .loginProcessingUrl("/access/login") 
      .and() 
      .logout() 
      .logoutUrl("/access/logout")     
      .logoutSuccessHandler(new LogoutSuccessHandler() { 
       @Override 
       public void onLogoutSuccess(
         HttpServletRequest request, 
         HttpServletResponse response, 
         Authentication a) throws IOException, ServletException { 
        response.setStatus(HttpServletResponse.SC_NO_CONTENT); 
       } 
      }) 
      .invalidateHttpSession(true) 
      .and() 
      .exceptionHandling() 
      .authenticationEntryPoint(new Http403ForbiddenEntryPoint()) 
      .and() 
      .csrf()//Disabled CSRF protection 
      .disable(); 
    } 
} 
+0

Вы реализовали этот код для работы с мобильными и веб-сайтами? Если да, можете ли вы поделиться этим кодом, чтобы я мог подробно изучить этот –

+0

, он работает как для веб-приложений, так и для мобильных устройств, я не могу поделиться этим кодом, вы должны попробовать, и если вы застряли тогда Я помогу решить его –

+0

спасибо за ваш отзыв ojus, я создал еще один вопрос, который показывает реализацию, я сделал до сих пор. Но все еще стоит вопрос. Я новичок в весенней безопасности, поэтому у меня много проблем. http://stackoverflow.com/questions/36140375/annotation-based-spring-security-for-rest-api –

Смежные вопросы