[エラー]ログインできません

9731 ワード

  • が登録するデータベース状態
  • に入る.
  • ただし、loginウィンドウでは、ユーザー名とパスワードを入力する必要はありません.
  • それでもコンソールにエラーは発生しません.
    -認証関連部分に問題があるようです.
  • 認証と関連クエリーが飛んでいます。

  • Mysqlワークベンチは、サーバのクライアント接続を検証しました-->認証に関連するクエリー、すなわち、ユーザーに入力したユーザー名がdbのテーブルに存在するかどうかのクエリーが飛んでいます.
  • 以降のinner joinクエリは表示されません.つまり、上記のクエリにいくつかの問題が発生しました.
  • ここで問題が見つかりました.
  • 現在、私のrestdbでは、ユーザーテーブル名がuserであり、上のクエリから、userに対するselect文
  • が発行されていることがわかります.
    これは.
        @Autowired
        public void configureGlobal(AuthenticationManagerBuilder auth)
                throws Exception {
            auth.jdbcAuthentication()
                    .dataSource(dataSource)
                    .passwordEncoder(passwordEncoder())
                    .usersByUsernameQuery("select username, password, enabled "
                            + "from user "
                            + "where username = ?")
                    .authoritiesByUsernameQuery("select u.username, r.name "
                            + "from user_role ur inner join user u on ur.user_id = u.id "
                            + "inner join role r on ur.role_id = r.id "
                            + "where u.username = ?");
        }
    ここで間違いがあったからです.

    以上のクエリの変更

        @Autowired
        public void configureGlobal(AuthenticationManagerBuilder auth)
                throws Exception {
            auth.jdbcAuthentication()
                    .dataSource(dataSource)
                    .passwordEncoder(passwordEncoder())
                    .usersByUsernameQuery("select username, password, enabled "
                            + "from users "
                            + "where username = ?")
                    .authoritiesByUsernameQuery("select u.username, r.name "
                            + "from user_role ur inner join user u on ur.user_id = u.id "
                            + "inner join role r on ur.role_id = r.id "
                            + "where u.username = ?");
        }
  • すなわち
  • ("select username, password, enabled "
                            + "from users "
                            + "where username = ?")
    のfrom userセクションからfrom userに変更します.
    今はinner queryに飛ぶことができます.
    しかし、Invalideユーザー名とpasswordのalertが現れた.

    理由:クエリーのtable名が間違っています...

  • の上のスクリーンショットでは、情報の内容は以下の通りである.
    select u.username, r.name from user_role ur inner join user u on ur.user_id = u.id inner join role r on ur.role_id = r.id where u.username = 'b'
  • すなわち
  •     @Autowired
        public void configureGlobal(AuthenticationManagerBuilder auth)
                throws Exception {
            auth.jdbcAuthentication()
                    .dataSource(dataSource)
                    .passwordEncoder(passwordEncoder())
                    .usersByUsernameQuery("select username, password, enabled "
                            + "from users "
                            + "where username = ?")
                    .authoritiesByUsernameQuery("select u.username, r.name "
                            + "from user_role ur inner join user u on ur.user_id = u.id "
                            + "inner join role r on ur.role_id = r.id "
                            + "where u.username = ?");
        }
  • すなわち
  • ("select username, password, enabled "
                            + "from users "
                            + "where username = ?")
    ユーザー名認証権限を使用するクエリーセクションと同じです.
    ...... 上のクエリーはハードコーディングのクエリーで、MySQL構文と私が使っているtable名を正しく記入する必要があります.
    ユーザー->user、role->roleに変更する必要があります.
  • の未明、一人でjpqlだと勘違いしたためかもしれません.