RedisセッションでSpringBoot認証を使用する方法

ドミトリー・マルツェフ

ユーザーをログイン(POST /login)し、現在のユーザーに関する情報を表示する(単純なRESTアプリケーションを作成して、SpringBootを学習しようとしていますGET /セッションにRedisを使用しています。

POST /login 期待どおりに機能します。プリンシパルを返し、ブラウザとRedisの両方でセッションCookieを設定します。

GET /ただし、結果のリクエストはを返しますanonymousUser何が足りないのですか?

pom.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-data-redis</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

application.properties

spring.session.store-type=redis

server.servlet.session.timeout=3600s
spring.session.redis.flush-mode=on-save
spring.session.redis.namespace=spring:session

spring.redis.host=localhost
spring.redis.port=6379

IndexController.java

@Controller
public class IndexController {

    private AuthenticationManager authenticationManager;

    IndexController(AuthenticationManager authenticationManager) {
        this.authenticationManager = authenticationManager;
    }

    @GetMapping
    ResponseEntity index(HttpServletRequest request, HttpSession session) {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        return new ResponseEntity<>(authentication.getPrincipal(), HttpStatus.OK);
    }

    @PostMapping("/login")
    ResponseEntity login(@RequestBody LoginRequest loginRequest) {
        String username = loginRequest.getUsername();
        String password = loginRequest.getPassword();
        UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password);
        Authentication authentication = this.authenticationManager.authenticate(token);
        return new ResponseEntity<>(authentication.getPrincipal(), HttpStatus.OK);
    }
}

Config.java

@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableWebSecurity
@EnableRedisHttpSession
@Configuration
public class Config extends WebSecurityConfigurerAdapter {

    @Autowired
    private CustomUserDetailsService userDetailsService;

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.ALWAYS)
            .and()
            .csrf()
            .disable()
            .authorizeRequests()
            .anyRequest()
            .permitAll();
    }
}
ドミトリー・マルツェフ

私判明が設定を忘れてしまったauthenticationlogin方法。これは正しいコードです。

@PostMapping("/login")
ResponseEntity login(@RequestBody LoginRequest loginRequest) {
    String username = loginRequest.getUsername();
    String password = loginRequest.getPassword();
    UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password);
    Authentication authentication = this.authenticationManager.authenticate(token);
    // vvv THIS vvv
    SecurityContextHolder
        .getContext()
        .setAuthentication(authentication);
    return new ResponseEntity<>(authentication.getPrincipal(), HttpStatus.OK);
}

https://docs.spring.io/spring-security/site/docs/5.0.5.RELEASE/reference/htmlsingle/#what-is-authentication-in-spring-securityを参照してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

RedisセッションでSpringBoot認証を使用する方法

分類Dev

RedisセッションでSpringBoot認証を使用する方法

分類Dev

Laravelで認証後にセッションを配置する方法

分類Dev

RedisキャッシュでAzureAD認証を使用する方法

分類Dev

Laravelにセッション認証のみを配置する方法

分類Dev

PHPでfile_get_contentsを使用する場合のセッション認証

分類Dev

Laravelルートページでセッションデータ(認証)を使用する方法

分類Dev

SpringBootを使用した認証とセッション管理について理解する

分類Dev

セッション認証を使用して、TastyPieでcurlを介して認証する

分類Dev

Laravelでセッションと認証を維持する

分類Dev

SpringBootアプリのRedisとSpringBootセッションのグローバルRedisを分離する方法

分類Dev

RedisなしでSpringBootセッションを使用することは可能ですか?

分類Dev

RevelでRedisベースのセッションを使用する方法

分類Dev

セッション+ redis永続性の使用時にプリンシパル/認証を取得できません

分類Dev

Expressセッションからの認証が成功した後、Reactクライアントでセッションを検証する方法

分類Dev

トークンベースの認証を使用する場合でもセッションは必要ですか

分類Dev

imcacheでredisキャッシュを認証する方法は?

分類Dev

リングアプリケーションでルートのサブセットを認証する方法は?

分類Dev

JSP ELでセッションを確認する方法

分類Dev

Vue.jsでセッションCookieベースの認証を実装する方法は?

分類Dev

Emberjs:カスタム認証初期化子でセッションを無効にする方法

分類Dev

Scrapyで認証済みセッションを使用してクロールする

分類Dev

Laravel認証/セッションをPHPと共有する

分類Dev

redisを使用した春のセッション-統合テストでそれをモックする方法は?

分類Dev

SpringBoot基本認証SpringBootセッションが可能

分類Dev

SpringBootアプリケーションとhawt.ioで基本認証を使用するJolokia

分類Dev

SFTPセッションが正常に認証されたかどうかを確認する方法

分類Dev

SSHで認証する前に共有セッションキーを生成するのはなぜですか?

分類Dev

php内のjavascriptを使用してセッションが空であるかどうかを確認する方法

Related 関連記事

  1. 1

    RedisセッションでSpringBoot認証を使用する方法

  2. 2

    RedisセッションでSpringBoot認証を使用する方法

  3. 3

    Laravelで認証後にセッションを配置する方法

  4. 4

    RedisキャッシュでAzureAD認証を使用する方法

  5. 5

    Laravelにセッション認証のみを配置する方法

  6. 6

    PHPでfile_get_contentsを使用する場合のセッション認証

  7. 7

    Laravelルートページでセッションデータ(認証)を使用する方法

  8. 8

    SpringBootを使用した認証とセッション管理について理解する

  9. 9

    セッション認証を使用して、TastyPieでcurlを介して認証する

  10. 10

    Laravelでセッションと認証を維持する

  11. 11

    SpringBootアプリのRedisとSpringBootセッションのグローバルRedisを分離する方法

  12. 12

    RedisなしでSpringBootセッションを使用することは可能ですか?

  13. 13

    RevelでRedisベースのセッションを使用する方法

  14. 14

    セッション+ redis永続性の使用時にプリンシパル/認証を取得できません

  15. 15

    Expressセッションからの認証が成功した後、Reactクライアントでセッションを検証する方法

  16. 16

    トークンベースの認証を使用する場合でもセッションは必要ですか

  17. 17

    imcacheでredisキャッシュを認証する方法は?

  18. 18

    リングアプリケーションでルートのサブセットを認証する方法は?

  19. 19

    JSP ELでセッションを確認する方法

  20. 20

    Vue.jsでセッションCookieベースの認証を実装する方法は?

  21. 21

    Emberjs:カスタム認証初期化子でセッションを無効にする方法

  22. 22

    Scrapyで認証済みセッションを使用してクロールする

  23. 23

    Laravel認証/セッションをPHPと共有する

  24. 24

    redisを使用した春のセッション-統合テストでそれをモックする方法は?

  25. 25

    SpringBoot基本認証SpringBootセッションが可能

  26. 26

    SpringBootアプリケーションとhawt.ioで基本認証を使用するJolokia

  27. 27

    SFTPセッションが正常に認証されたかどうかを確認する方法

  28. 28

    SSHで認証する前に共有セッションキーを生成するのはなぜですか?

  29. 29

    php内のjavascriptを使用してセッションが空であるかどうかを確認する方法

ホットタグ

アーカイブ