要在 Spring Security 中自訂登入表單以使用自訂資料庫,可以按照下列步驟操作:
建立自訂 UserDetailsService:
實作 UserDetailsService 介面以從自訂資料庫載入使用者詳細資訊。
重寫 loadUserByUsername 方法以查詢資料庫中的使用者詳細資訊。
配置Spring Security:
在 Spring Security 設定中,定義 UserDetail Service bean。
設定 AuthenticationManager 以使用您的自訂 UserDetailsService。
透過指定登入頁面 URL 和登入處理 URL 自訂登入表單。
實作自訂登入表單:
為自訂登入表單建立 JSP 或 HTML 檔案。
包括使用者名稱和密碼的輸入欄位以及提交按鈕。
使用Spring Security配置中指定的登入處理URL來提交表單。
這是一個範例實作:
公共類別 CustomUserDetailsService 實作 UserDetailsService {
@Autowired
私人 JdbcTemplate jdbcTemplate;
@Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { String query = "SELECT * FROM users WHERE username = ?"; User user = jdbcTemplate.queryForObject(query, new Object[]{username}, new UserRowMapper()); if (user == null) { throw new UsernameNotFoundException("User not found"); } return user; }
}
@配置
@EnableWebSecurity
公共類別 SecurityConfig 擴充 WebSecurityConfigurerAdapter {
@Autowired
私人 CustomUserDetailsService customUserDetailservice;
@Autowired private PasswordEncoder passwordEncoder; @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(customUserDetailsService) .passwordEncoder(passwordEncoder); } @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/login").permitAll() .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") .loginProcessingUrl("/login") .defaultSuccessUrl("/welcome") .failureUrl("/login?error") .permitAll(); }
}
在 src/main/webapp/WEB-INF/views 目錄(或等效位置)中建立一個 login.jsp(或 login.html)檔案:
在此範例中,登入表單提交到 /login URL,這是 Spring Security 設定中指定的登入處理 URL。
透過執行下列步驟,您可以在 Spring Security 中自訂登入表單,以使用自訂資料庫進行使用者驗證。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3