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

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

ただいまの
回答率

91.01%

  • Java

    12172questions

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

  • Spring

    581questions

    Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

SpringSecurityのUserDetailsオブジェクトの拡張クラスとJdbcDaoImplクラスの拡張クラスについて

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 338

heavyuseman

score 34

いつもお世話になっております。
SpringSecurityのUserDetailsオブジェクトの拡張クラスとJdbcDaoImplクラスの拡張クラスについて質問があります。
上記のクラスを作成し、コンパイル実行したところ、下記のエラーが発生しました。
Newaccountクラスのコンストラクタ側の設定が間違っているのが原因だと思ったのですが、設定は正しいと考えております。
原因が不明ですのでご回答宜しくお願い致します。

エラーログ
2017-10-02 16:16:16.719  WARN 1207 --- [           main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NullPointerException
2017-10-02 16:16:16.725  WARN 1207 --- [           main] o.s.boot.SpringApplication               : Error handling failed (Error creating bean with name 'delegatingApplicationListener' defined in class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class]: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration': Initialization of bean failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry' available)
2017-10-02 16:16:16.744 ERROR 1207 --- [           main] o.s.boot.SpringApplication               : Application startup failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NullPointerException
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1081) ~[spring-context-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:856) ~[spring-context-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) ~[spring-context-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) [spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370) [spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) [spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162) [spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151) [spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
    at com.tuyano.springboot.TestApiApplication.main(TestApiApplication.java:13) [bin/:na]
Caused by: java.lang.NullPointerException: null
    at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:57) ~[na:1.8.0_91]
    at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:75) ~[na:1.8.0_91]
    at java.lang.reflect.Field.set(Field.java:764) ~[na:1.8.0_91]
//UserDetailsオブジェクトの拡張クラス
//Newaccount.java
package com.tuyano.springboot.dateaccess;

import java.util.Collection;

import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.User;


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;


@Entity
public class Newaccount extends User{

    @Id
    @GeneratedValueの意味
    private Integer ID;
//
    @Column
    private String username;
//    @Column// 
    private String password;
//    @Column// 
    private String address;
//    // setter & getter ---------------------
    public Integer getID() {
        return ID;
    }
    public String getUserName(){
        return username;
    }
    public String getPassword(){
        return password;
    }
    public String getAddress(){
        return address;
    }
//    
    public void setEmpID(Integer ID) {
        this.ID = ID;
    }
//
    public void setUserName(String username) {
        this.username = username;
    }
//
    public void setPassword(String password) {
        this.password = password;
    }
//    
    public void setAddress(String address) {
        this.address = address;
    }



    // constructor --------------------------
    //引数String name,String password,authorities渡す
    public Newaccount(String username,String password,
            Collection<? extends GrantedAuthority>authorities){
        super(username,password,authorities);
    }
    //引数Integer ID,String name,int password,String address渡す
   // public Newaccount(Integer ID, String name,int password,String address){
   //     super();
   //     this.ID =ID;
   //     this.name = name;
   //     this.password = password;
   //     this.address = address;
    //}

}
//SampleJdbcDaoImpl.java
//JdbcDaoImpplクラスの拡張クラス
package com.tuyano.springboot.dateaccess;
import org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl;
import java.util.List;
import java.sql.ResultSet;
import java.sql.SQLException;



import org.springframework.jdbc.core.RowMapper;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.UserDetails;

public class SampleJdbcDaoImpl extends JdbcDaoImpl {
    @Override
     protected List<UserDetails> loadUsersByUsername(String username) {
     return getJdbcTemplate().query(getUsersByUsernameQuery(),
     new String[] { username }, new RowMapper<UserDetails>() {
     public UserDetails mapRow(ResultSet rs, int rowNum)
     throws SQLException {
     String username = rs.getString("USERNAME");
     String loginId = rs.getString("LOGIN_ID");
     String password = rs.getString("PASSWORD");
     Newaccount user =new Newaccount(username,password,AuthorityUtils.NO_AUTHORITIES);
     user.setUserName(username);
     user.setPassword(password);

     return user;
}
});
     }

    @Override
    protected UserDetails createUserDetails(String username, UserDetails userFromUserQuery,
    List<GrantedAuthority> combinedAuthorities) {
    Newaccount origin =(Newaccount) userFromUserQuery;
     String loginId = origin.getUserName();
     String password = origin.getPassword();
     Newaccount user =new Newaccount(loginId,password,combinedAuthorities);
     user.setUserName(username);
     user.setPassword(password);

     return user;
    } 
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • asahina1979

    2017/10/14 10:02

    entityManagerFactory の生成に失敗しているから JPAに関連する設定が必須かな

    キャンセル

回答 1

0

org.springframework.security.core.userdetails.Userを継承していることが原因だと思います。

JPAを使う場合このUserを継承することはできません。
代わりにorg.springframework.security.core.userdetails.UserDetailsを実装すれば
とりあえずは先に進めると思います。

@Entity
public class Newaccount extends User {
  // ...
}


@Entity
public class Newaccount implements UserDetails {
  // ...
}

あとJPAは引数なしのコンストラクタの定義は必須なのでそこも修正する必要があると思われます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 91.01%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    spring bootで静的ファイルにアクセスする方法

    Spring bootでシステム構築をしているのですが、cssやjs以外の静的ファイルのアクセス方法が分からず困っています。 デプロイ方法:jar 具体的には、src/

  • 解決済

    spring+thimeleaf+tomcatでPOST送信が文字化け

    Spring boot + thimeleaf + tomcatでWEBアプリ開発を行っております。 <使用ミドルウェア>  spring boot:1.3.2  thi

  • 解決済

    Springでpropertiesファイルが切り替えられない

    前提・実現したいこと 開発と本番でyml形式のプロパティファイルを切り替えたいです 発生している問題・エラーメッセージ どうしても後段のqaのプロパティになってしまい、プ

  • 解決済

    ログアウトを行ったユーザのID取得

    前提・実現したいこと Spring Securityを利用した認証を行っています。 ログアウト時に、ログアウトしたユーザのIDを含んだ独自のログを出力したいと考えています。

  • 解決済

    Spring起動時エラー

    java 前提・実現したいこと springを実行中に以下のエラーメッセージが発生しました。 src/main/resourcesの配下にsqlファイルを置いているのですが実

  • 解決済

    Spring起動→サーバーアクセス反応なし

    ※フォルダ構成です。 springをApplicationのメインメッソッドで実行したのですがhttp://localhost:8080/roomsにアクセスしても404

  • 解決済

    コンストラクタに引数が必要なクラスのDIについて

    コンストラクタに引数(処理中に値が決定する)が必要なクラスをDIする場合 どのように実装したらよいのでしょうか。 1.基本的にシングルトンなので動的な引数でインスタンス化は

  • 解決済

    ThymeleafでPOSTされた値を画面に出力したい

    こんにちは、SpringBoot、ThymeleafをつかってHTMLでつくられた固定値の入ったテーブルを表示し、 空白のカラムなどを追加してデータの変更を受付けsubmitするこ

同じタグがついた質問を見る

  • Java

    12172questions

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

  • Spring

    581questions

    Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。