我想使用 Spring security 來獲取當前登錄的用戶物件,但它回傳一個空值。我從存盤庫中實作了 findByUsername 方法進行測驗,但它回傳空/空值,并且我確保資料在資料庫中。我可能做錯了什么?
物體類
public class User {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String firstName ;
private String lastName;
@Column(name="user_name", unique=true)
private String userName;
private String password;
private String Gender;
存盤庫類
@Repository
public interface UserAccountRepository extends JpaRepository <User, Long> {
Optional<User> findById(Long id);
User findByUserName(String username);
服務等級
@Transactional
@Service
public class UserAccountService implements UserDetailsService {
@Autowired
private UserAccountRepository userRepository;
private PasswordEncoder bCryptPasswordEncoder;
public User findByUserName(String username)
{
return userRepository.findByUserName(username);
}
控制器類
@GetMapping(value="/user/{username}")
public User findByUsername(String username) {
System.out.println("Username :" username);
return userAccountService.findByUserName(username);
}
應用特性
spring.datasource.url=jdbc:mysql://localhost:3306/investmentpartners
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username= root
spring.datasource.password=
spring.jpa.hibernate.ddl-auto=update
## Hibernate Properties
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
spring.main.allow-bean-definition-overriding=true
spring.servlet.multipart.max-file-size=3000KB
spring.servlet.multipart.max-request-size=3000KB
spring.http.multipart.enabled=false
將 spring.jpa.show-sql=true 添加到 application.properties 檔案后,這里是生成的查詢
Hibernate: select user0_.id as id1_4_, user0_.gender as gender2_4_, user0_.branch_id as branch_11_4_, user0_.created_date as created_3_4_, user0_.email as email4_4_, user0_.first_name as first_na5_4_, user0_.last_name as last_nam6_4_, user0_.password as password7_4_, user0_.phone_number as phone_nu8_4_, user0_.status as status9_4_, user0_.user_name as user_na10_4_ from user user0_ where user0_.user_name is null
null
uj5u.com熱心網友回復:
您忘記用注釋標記路徑變數。
解決方案:
@PathVariable String username
控制器類
@GetMapping(value="/user/{username}")
public User findByUsername(@PathVariable String username) {
System.out.println("Username :" username);
return userAccountService.findByUserName(username);
}
筆記:
不要System.out.println在您的代碼中使用來注銷某些東西,尤其是當您使用Spring并且您的代碼在服務器 (Tomcat) 中運行時。Spring 提供了一種完美的、易于使用的方式來寫一些東西來記錄:
public class YourController {
Logger logger = LoggerFactory.getLogger(YourController .class);
@GetMapping(...)
public String index(...) {
logger.debug("A DEBUG Message");
logger.info("An INFO Message");
// ...
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/360461.html
