2016-09-13 9 views
2

Я пытаюсь сделать вход в приложение Spring Boot для другого приложения и сгенерировать токен с использованием Spring Security. Что я пытаюсь достичь:Аутентификация токена начальной загрузки

  1. Имя пользователя и пароль отправляются контроллеру REST.
  2. Если имя пользователя и пароль в порядке, я хочу сгенерировать токен с истечением 30 минут и отправить его пользователю.
  3. Токен используется для проверки пользователя в @PreAuthorized методах.

Есть ли способ добиться этого в весенней безопасности или я должен сделать это вручную? Я не знаю, как сохранить токен, например Spring, используя Spring Security.

ответ

0

Я использую весеннюю загрузку-стартерную версию 1.5.7.RELEASE.

Мой подход не является полным решением, но он может вам помочь.

Вы можете отправить пользователю/пароль и получить файл cookie SESSION, который затем можно будет использовать дальше.

Оговорка:

  • Вам все еще нужно установить время истечения куки/маркера.
  • Вам необходимо автоматизировать процесс входа в систему - напрямую отправить учетные данные пользователя (этот подход обслуживает login.html ...).

условии, что вы уже весна загрузки безопасности включен в вашем ПОМ.

добавить также следующее для включения управления сеансом и Redis как HTTP сессии магазин (в вашем ПОМ):

 <dependency> 
     <groupId>org.springframework.session</groupId> 
     <artifactId>spring-session</artifactId> 
     </dependency> 

     <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-redis</artifactId> 
     </dependency> 

Добавить класс, extends WebSecurityConfigurerAdapter. Вы, возможно, уже есть что:

@Configuration 
@EnableGlobalMethodSecurity(prePostEnabled = true) // enable method-level authorization (@PreAuthorize("expression")) 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{ 
    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth 
      .inMemoryAuthentication() 
       .withUser("user").password("user").roles("USER").and() 
       .withUser("admin").password("admin").roles("USER", "ADMIN"); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
    http.authorizeRequests() 
      .anyRequest().hasAnyRole("USER", "ADMIN").anyRequest().authenticated() 
      .and() 
      .httpBasic().disable(); 
    http 
      .csrf().disable() 
      .and() 
      .formLogin() 
      .usernameParameter("j_username") 
      .passwordParameter("j_password") 
      .loginPage("/login.html") 
      .loginProcessingUrl("/j_spring_security_check") 
      .defaultSuccessUrl("/#") 
      .failureUrl("/loginNotSuccessfull.html") 
      .permitAll(); 
} 

Также у меня есть REDIS сервер как HTTP сессии магазина (я только начал грузчиком контейнер, используя redis:4-alpine изображение и --protected-mode no и --net=host.) Со следующими свойствами в применения. свойства:

spring.session.store-type=redis 
spring.redis.host=localhost 
spring.redis.port=6379 

чтобы сделать его работу, я также включал в себя класс HTTPSessionConfig для включения redis HTTP sessions:

@EnableRedisHttpSession 
public class HttpSessionConfig { 

} 

Spring ботинка обрабатывает все необходимые вещи - хранение пользователю в Redis, проверяя SESSION и т.д.


Я надеюсь, что это все работает, как ожидалось.

Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать.

Update:

This link shows, как использовать встроенный сервер Redis.

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