質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Spring Security

Spring Securityは、Springのサブプロジェクトの一つでWebアプリケーションに必要な機能を追加します。正規ユーザーであるかを確認するための「認証機能」と、ユーザーのアクセスを制御する「認可機能」を簡単に追加することが可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

0回答

1508閲覧

Spring Secutiry 認証情報が上書きされてしまう

退会済みユーザー

退会済みユーザー

総合スコア0

Spring Security

Spring Securityは、Springのサブプロジェクトの一つでWebアプリケーションに必要な機能を追加します。正規ユーザーであるかを確認するための「認証機能」と、ユーザーのアクセスを制御する「認可機能」を簡単に追加することが可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2019/07/24 12:37

現在、Springのセッション情報をjson形式でredisに格納するための対応を行っております。
config設定を行い、redisへのセッション情報の格納までは確認できましたが、
その後、セッションがredis上に存在している状態で再度アクセスを行うとエラーが発生してしまいます。

ログイン認証時にUsernamePasswordAuthenticationTokenのprincipalには
org.springframework.security.core.userdetails.Userを拡張した、
LoginUserクラスを格納しております。
それが認証後の処理にて再度、UsernamePasswordAuthenticationTokenが実行され、
principalが拡張元のUserクラスで上書きされているのまでは確認できたのですが、
何故、上書きが起こるのかが理解できていない状況です。

確認したいのは以下2点です。
ご教示頂ければ幸いです。
1.UsernamePasswordAuthenticationTokenが再実行されてしまう理由
2.configの設定不備の有無

####エラーログ
java.lang.ClassCastException: org.springframework.security.core.userdetails.User cannot be cast to jp.remacle.config.security.LoginUser

#####エラー発生箇所実装
return (LoginUser)SecurityContextHolder.getContext().getAuthentication().getPrincipal();

HttpSessionConfig

1@Configuration 2public class HttpSessionConfig implements BeanClassLoaderAware { 3 4 private ClassLoader classLoader; 5 6 @Override 7 public void setBeanClassLoader(ClassLoader classLoader) { 8 // TODO 自動生成されたメソッド・スタブ 9 this.classLoader = classLoader; 10 } 11 12 @Bean 13 public RedisSerializer<Object> springSessionDefaultRedisSerializer() { 14 ObjectMapper objectMapper = objectMapper(); 15 objectMapper.addMixIn(LoginUser.class,LoginUserMixin.class); 16 objectMapper.registerModules(SecurityJackson2Modules.getModules(classLoader)); // Spring Securityの拡張モジュールの適用 17 return new GenericJackson2JsonRedisSerializer(objectMapper); // Spring Data RedisにJSON変換用のコンポーネントを適用 18 } 19 20 @Bean 21 public ObjectMapper objectMapper() { 22 ObjectMapper mapper = new ObjectMapper(); 23 mapper.registerModule(new CoreJackson2Module()); 24 return mapper; 25 } 26}

LoginUser

1public class LoginUser extends User { 2 3 private static final long serialVersionUID = 1L; 4 5 @Getter 6 @Setter 7 private String userAddreses; 8 9 public LoginUser(String username, String password, Collection<? extends GrantedAuthority> authorities) { 10 super(username, password, authorities); 11 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/07/24 13:29

認証ユーザークラスの拡張クラスをつくっただけでかってに置き換えてもらえるとおもってるなら出直せって言いたい。 あなたの提示したクラス群では通常の認証ユーザークラスから変わりません。・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問