質問編集履歴

4

必要そうな情報を追記しました。

2020/05/25 12:21

投稿

yys949
yys949

スコア9

test CHANGED
File without changes
test CHANGED
@@ -550,18 +550,6 @@
550
550
 
551
551
 
552
552
 
553
- /**
554
-
555
- * UserDetailsServiceインタフェースの実装メソッド
556
-
557
- * フォームから取得したユーザ名でDBを検索し、合致するものが存在したとき、
558
-
559
- * パスワード、権限情報と共にUserDetailsオブジェクトを生成
560
-
561
- * コンフィグクラスで上入力値とDBから取得したパスワードと比較し、ログイン判定を行う
562
-
563
- */
564
-
565
553
  @Override
566
554
 
567
555
  public UserDetails loadUserByUsername(String userId) throws UsernameNotFoundException {
@@ -578,12 +566,6 @@
578
566
 
579
567
  }
580
568
 
581
- //権限のリスト
582
-
583
- //AdminやUserなどが存在するが、今回は利用しないのでUSERのみを仮で設定
584
-
585
- //権限を利用する場合は、DB上で権限テーブル、ユーザ権限テーブルを作成し管理が必要
586
-
587
569
  List<GrantedAuthority> grantList = new ArrayList<GrantedAuthority>();
588
570
 
589
571
  GrantedAuthority authority = new SimpleGrantedAuthority("USERS");
@@ -598,8 +580,6 @@
598
580
 
599
581
 
600
582
 
601
- //UserDetailsはインタフェースなのでUserクラスのコンストラクタで生成したユーザオブジェクトを
602
-
603
583
  UserDetails userDetails = (UserDetails)new User(user.getUserName(), encoder.encode(user.getPassword()),grantList);
604
584
 
605
585
 

3

必要そうな情報を追記しました。

2020/05/25 12:21

投稿

yys949
yys949

スコア9

test CHANGED
File without changes
test CHANGED
@@ -338,6 +338,280 @@
338
338
 
339
339
  ```
340
340
 
341
+ ```UserEntity.java
342
+
343
+ @Entity
344
+
345
+ @Table(name = "USERS")
346
+
347
+ public class UserEntity implements UserDetails{
348
+
349
+
350
+
351
+ /**
352
+
353
+ *
354
+
355
+ */
356
+
357
+ private static final long serialVersionUID = 1L;
358
+
359
+
360
+
361
+ @Id
362
+
363
+ @Column(name = "USER_ID")
364
+
365
+ @NotEmpty
366
+
367
+ private String userId;
368
+
369
+
370
+
371
+ @Column(name = "USER_NAME")
372
+
373
+ @NotEmpty
374
+
375
+ private String userName;
376
+
377
+
378
+
379
+ @Column(name = "ADMIN_FLG")
380
+
381
+ private int adminFlg;
382
+
383
+
384
+
385
+ @Column(name = "PASSWORD")
386
+
387
+ @NotEmpty
388
+
389
+ private String password;
390
+
391
+
392
+
393
+ public String getUserId() {
394
+
395
+ return userId;
396
+
397
+ }
398
+
399
+
400
+
401
+ public void setUserId(String userId) {
402
+
403
+ this.userId = userId;
404
+
405
+ }
406
+
407
+
408
+
409
+ public String getUserName() {
410
+
411
+ return userName;
412
+
413
+ }
414
+
415
+
416
+
417
+ public void setUserName(String userName) {
418
+
419
+ this.userName = userName;
420
+
421
+ }
422
+
423
+
424
+
425
+ public int getAdminFlg() {
426
+
427
+ return adminFlg;
428
+
429
+ }
430
+
431
+
432
+
433
+ public void setAdminFlg(int adminFlg) {
434
+
435
+ this.adminFlg = adminFlg;
436
+
437
+ }
438
+
439
+
440
+
441
+ public String getPassword() {
442
+
443
+ return password;
444
+
445
+ }
446
+
447
+
448
+
449
+ public void setPassword(String password) {
450
+
451
+ this.password = password;
452
+
453
+ }
454
+
455
+
456
+
457
+ @Override
458
+
459
+ public Collection<? extends GrantedAuthority> getAuthorities() {
460
+
461
+ // TODO 自動生成されたメソッド・スタブ
462
+
463
+ return null;
464
+
465
+ }
466
+
467
+
468
+
469
+ @Override
470
+
471
+ public String getUsername() {
472
+
473
+ // TODO 自動生成されたメソッド・スタブ
474
+
475
+ return null;
476
+
477
+ }
478
+
479
+
480
+
481
+ @Override
482
+
483
+ public boolean isAccountNonExpired() {
484
+
485
+ // TODO 自動生成されたメソッド・スタブ
486
+
487
+ return false;
488
+
489
+ }
490
+
491
+
492
+
493
+ @Override
494
+
495
+ public boolean isAccountNonLocked() {
496
+
497
+ // TODO 自動生成されたメソッド・スタブ
498
+
499
+ return false;
500
+
501
+ }
502
+
503
+
504
+
505
+ @Override
506
+
507
+ public boolean isCredentialsNonExpired() {
508
+
509
+ // TODO 自動生成されたメソッド・スタブ
510
+
511
+ return false;
512
+
513
+ }
514
+
515
+
516
+
517
+ @Override
518
+
519
+ public boolean isEnabled() {
520
+
521
+ // TODO 自動生成されたメソッド・スタブ
522
+
523
+ return false;
524
+
525
+ }
526
+
527
+
528
+
529
+ }
530
+
531
+
532
+
533
+ ```
534
+
535
+ ```JpaUserDetailsServiceImpl.java
536
+
537
+ @Component
538
+
539
+ @Service
540
+
541
+ public class JpaUserDetailsServiceImpl implements UserDetailsService {
542
+
543
+
544
+
545
+ //DBからユーザ情報を検索するメソッドを実装したクラス
546
+
547
+ @Autowired
548
+
549
+ private LoginUserDao userDao;
550
+
551
+
552
+
553
+ /**
554
+
555
+ * UserDetailsServiceインタフェースの実装メソッド
556
+
557
+ * フォームから取得したユーザ名でDBを検索し、合致するものが存在したとき、
558
+
559
+ * パスワード、権限情報と共にUserDetailsオブジェクトを生成
560
+
561
+ * コンフィグクラスで上入力値とDBから取得したパスワードと比較し、ログイン判定を行う
562
+
563
+ */
564
+
565
+ @Override
566
+
567
+ public UserDetails loadUserByUsername(String userId) throws UsernameNotFoundException {
568
+
569
+
570
+
571
+ UserEntity user = userDao.findUser(userId);
572
+
573
+
574
+
575
+ if (user == null) {
576
+
577
+ throw new UsernameNotFoundException("User" + userId + "was not found in the database");
578
+
579
+ }
580
+
581
+ //権限のリスト
582
+
583
+ //AdminやUserなどが存在するが、今回は利用しないのでUSERのみを仮で設定
584
+
585
+ //権限を利用する場合は、DB上で権限テーブル、ユーザ権限テーブルを作成し管理が必要
586
+
587
+ List<GrantedAuthority> grantList = new ArrayList<GrantedAuthority>();
588
+
589
+ GrantedAuthority authority = new SimpleGrantedAuthority("USERS");
590
+
591
+ grantList.add(authority);
592
+
593
+
594
+
595
+ //rawDataのパスワードは渡すことができないので、暗号化
596
+
597
+ BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
598
+
599
+
600
+
601
+ //UserDetailsはインタフェースなのでUserクラスのコンストラクタで生成したユーザオブジェクトを
602
+
603
+ UserDetails userDetails = (UserDetails)new User(user.getUserName(), encoder.encode(user.getPassword()),grantList);
604
+
605
+
606
+
607
+ return userDetails;
608
+
609
+ }
610
+
611
+ }
612
+
613
+ ```
614
+
341
615
 
342
616
 
343
617
  ### 試したこと

2

必要そうな情報を追記しました。

2020/05/25 12:20

投稿

yys949
yys949

スコア9

test CHANGED
File without changes
test CHANGED
@@ -62,7 +62,7 @@
62
62
 
63
63
  public String loginFormSubmit(@Valid @ModelAttribute UserForm loginUser,
64
64
 
65
- BindingResult result) {
65
+ BindingResult result, Model model) {
66
66
 
67
67
 
68
68
 
@@ -88,7 +88,7 @@
88
88
 
89
89
  }
90
90
 
91
-
91
+ setLoginInfo(userInfo);
92
92
 
93
93
  model.addAttribute(loginUser);
94
94
 
@@ -100,7 +100,21 @@
100
100
 
101
101
  }
102
102
 
103
+
104
+
103
-
105
+ private void setLoginInfo(UserEntity userEntityResult) {
106
+
107
+
108
+
109
+ this.userForm.setUserId(userEntityResult.getUserId());
110
+
111
+ this.userForm.setPassword(userEntityResult.getPassword());
112
+
113
+ this.userForm.setUserName(userEntityResult.getUserName());
114
+
115
+
116
+
117
+ }
104
118
 
105
119
 
106
120
 
@@ -128,7 +142,97 @@
128
142
 
129
143
  ```
130
144
 
131
-
145
+ ```UserService.java
146
+
147
+ @Service
148
+
149
+ @Transactional
150
+
151
+ public class UserService {
152
+
153
+
154
+
155
+ @Autowired
156
+
157
+ private UserRepository userRepository;
158
+
159
+
160
+
161
+ @Autowired
162
+
163
+ LoginUserDao loginUserDao;
164
+
165
+
166
+
167
+ @Autowired
168
+
169
+ private BCryptPasswordEncoder passwordEncoder;
170
+
171
+
172
+
173
+ public UserEntity create(UserEntity account, String rawPassword) {
174
+
175
+ String encodePassword = passwordEncoder.encode(rawPassword);
176
+
177
+ account.setPassword(encodePassword);
178
+
179
+
180
+
181
+ return userRepository.save(account);
182
+
183
+ }
184
+
185
+
186
+
187
+ public UserEntity loginCheck(String userId, String password) {
188
+
189
+ return loginUserDao.findUser(userId);
190
+
191
+ }
192
+
193
+
194
+
195
+ }
196
+
197
+ ```
198
+
199
+ ```LoginUserDao.java
200
+
201
+ @Repository
202
+
203
+ public class LoginUserDao {
204
+
205
+
206
+
207
+ @Autowired
208
+
209
+ EntityManager em;
210
+
211
+
212
+
213
+ public UserEntity findUser(String userId) {
214
+
215
+ String query = "";
216
+
217
+ query += "SELECT * ";
218
+
219
+ query += "FROM USERS ";
220
+
221
+ query += "WHERE USER_ID = :userId ";
222
+
223
+
224
+
225
+ return (UserEntity)em.createNativeQuery(query, UserEntity.class).setParameter("userId", userId)
226
+
227
+ .getSingleResult();
228
+
229
+ }
230
+
231
+ }
232
+
233
+
234
+
235
+ ```
132
236
 
133
237
  ```login.html
134
238
 
@@ -254,7 +358,11 @@
254
358
 
255
359
 
256
360
 
361
+ 上記のような感じで書いてあります。
362
+
257
- ほかにど情報を書けばいいかわからなかったのでとりあえずControllerの処理htmlのほうだけ書きましたが必要な情報あれば教えください。
363
+ ログイン先画面への移行はできたのですが、そもそものuserInfoとしたところユーザー情報をすべ返すように作ったと思ったのにnullが返ってきてます
364
+
365
+ dao内の書き方が悪いのでしょうか。
258
366
 
259
367
 
260
368
 

1

誤字

2020/05/25 12:05

投稿

yys949
yys949

スコア9

test CHANGED
File without changes
test CHANGED
@@ -110,7 +110,7 @@
110
110
 
111
111
 
112
112
 
113
- model.addAttribute("userId", userId);
113
+ model.addAttribute("loginUser", loginUser);
114
114
 
115
115
 
116
116