###実現したいこと
現在、【はじめてのSpringBoot[改訂版]】を使用し、ログイン機能を作成しようとしています。
DBマイグレーションはFlywayを使用しています。
しかし、SpringBootのバージョンアップに伴い、リポジトリのfindOneメソッドが、
findByIdメソッドに代わり、Optional<※※※>をつけて使用しているのですが、
LoginUserDetailsのコンストラクターでエラーが発生してしまい、うまく動作ができない状況です。
Spring Boot初学者です。
###使用環境
ー Mac OS
ー Java11
ー SpringBoot 2.5.4
ー SpringToolSuite 4.0
###コード
LoginUserDetails
1import com.example.hajibootthymeleaf.domain.User; 2import lombok.Data; 3 4import java.util.Optional; 5 6import org.springframework.security.core.authority.AuthorityUtils; 7 8@Data 9public class LoginUserDetails extends org.springframework.security.core.userdetails.User { 10 private final Optional<User> user; 11 12 public LoginUserDetails(Optional<User> user) { 13 super(user.getUsername(), user.getEncodedPassword(), 14 ⬆︎エラー ⬆︎エラー 15AuthorityUtils.createAuthorityList("ROLE_USER")); 16 this.user = user; 17 } 18} 19
error
1The method getEncodedPassword() is undefined for the type Optional<User>
LoginUserDetailsService
1import com.example.hajibootthymeleaf.domain.User; 2import com.example.hajibootthymeleaf.repository.UserRepository; 3 4import java.util.List; 5import java.util.Optional; 6 7import org.springframework.beans.factory.annotation.Autowired; 8import org.springframework.security.core.userdetails.UserDetails; 9import org.springframework.security.core.userdetails.UserDetailsService; 10import org.springframework.security.core.userdetails.UsernameNotFoundException; 11import org.springframework.stereotype.Service; 12 13public class LoginUserDetailsService implements UserDetailsService { 14 @Autowired 15 UserRepository userRepository; 16 17 @Override 18 public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 19 Optional<User> user = userRepository.findById(username); 20 if (user == null) { 21 throw new UsernameNotFoundException("The requested user is not found."); 22 } 23 return new LoginUserDetails(user); 24 } 25} 26
userRepository
1import com.example.hajibootthymeleaf.domain.User; 2 3import org.springframework.data.jpa.repository.JpaRepository; 4 5public interface UserRepository extends JpaRepository<User, String> { 6} 7
user
1import com.fasterxml.jackson.annotation.JsonIgnore; 2import lombok.AllArgsConstructor; 3import lombok.Data; 4import lombok.NoArgsConstructor; 5import lombok.ToString; 6 7import javax.persistence.*; 8import java.util.List; 9 10@Data 11@NoArgsConstructor 12@AllArgsConstructor 13@Entity 14@Table(name = "users") 15@ToString(exclude = "customers") 16public class User { 17 @Id 18 private String username; 19 @JsonIgnore 20 private String encodedPassword; 21 @JsonIgnore 22 @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user") 23 private List<Customer> customers; 24}
aprication_properties
1spring.datasource.driver-class-name=net.sf.log4jdbc.DriverSpy 2spring.datasource.url=jdbc:log4jdbc:h2:file:./target/db/customer 3logging.level.jdbc=OFF 4logging.level.jdbc.sqltiming=DEBUG 5spring.jpa.hibernate.ddl-auto=validate 6 7security.basic.enabled=false
かなり詰まっていまして、どうにも解決できません。
ご教授いただければ幸いです。
どうぞよろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。