Всякий раз, когда я пытаюсь отправить учетные данные через страницу входа, я получаю ошибку 404. Я что-то упускаю, чтобы это работало?
Spring 7 WebSecurityConfig.java (Spring 7)
Код: Выделить всё
@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
/**
* クラス名です。トレースに使用します。
*/
private String sClassName_ = null;
/**
* ユーザーのデフォルト権限です。
*/
private List authorities_ = null;
/**
* ログインページです。
*/
private String sLoginPage_ = null;
/**
* ログアウトの遷移先URLです。
*/
private String sLogoutUrl_ = null;
/**
* ログイン成功時の遷移先URLです。
*/
private String sLoginSuccessUrl_ = null;
/**
* ログインしていないユーザー用のページです。
*/
private String[] aAnonymousPage_ = null;
/**
* ログイン必要なページです。
*/
private String[] aAuthenticatedPage_ = null;
public WebSecurityConfig() {
sClassName_ = getClass().getName();
authorities_ = new ArrayList();
authorities_.add(new SimpleGrantedAuthority("LINIC3"));
sLoginPage_ = Linic3Property.getWebSecurity(Linic3Property.LOGINPAGE);
sLogoutUrl_ = Linic3Property.getWebSecurity(Linic3Property.LOGOUTURL);
sLoginSuccessUrl_ = Linic3Property.getWebSecurity(Linic3Property.LOGINSUCCESSURL);
// -----------------------------------------
// ログインしていないユーザー用のページ
// -----------------------------------------
String sAnonymousPage = Linic3Property.getWebSecurity(Linic3Property.ANONYMOUSPAGE);
List aAnonymousPage = splitToken(sAnonymousPage);
aAnonymousPage_ = aAnonymousPage.toArray(String[]::new);
// -----------------------------------------
// ログイン必要なページ
// -----------------------------------------
String sAuthenticatedPage = Linic3Property.getWebSecurity(Linic3Property.AUTHENTICATEDPAGE);
List aAuthenticatedPage = splitToken(sAuthenticatedPage);
aAuthenticatedPage_ = aAuthenticatedPage.toArray(String[]::new);
}
@Bean
public UserDetailsService userDetailsService(PasswordEncoder passwordEncoder) throws Exception {
return username -> {
String sTraceMark = sClassName_ + ".userDetailsService():";
Trace.debug(sTraceMark + "Start!");
UserMasterBean bean = new UserMasterBean();
RdbHandler handler = new RdbHandler(RdbHandler.MODE_WEB);
try {
handler.connect();
bean.setUSERID(username);
// ---------------------------------
// ユーザーマスタを取得します
// ---------------------------------
handler.select(SQLProperty.getSelectSql("LPF300C", "LPF300C_SEL03"), bean);
if (handler.next()) {
handler.fetch(bean);
} else {
handler.closeStatement();
throw new UsernameNotFoundException(username);
}
handler.closeStatement();
if (bean.getUSERPASSWORD() == null) {
throw new UsernameNotFoundException(username);
}
// 当月ログイン回数カウントアップ
handler.update(SQLProperty.getUpdateSql("LPF300C", "LPF300C_UPD03"), bean);
handler.commit();
return User.builder().username(username).password(passwordEncoder.encode(bean.getUSERPASSWORD())).authorities(authorities_).build();
} catch (Exception e) {
Trace.printStackTrace(e);
} finally {
handler.disconnect();
Trace.debug(sTraceMark + "End!");
}
throw new UsernameNotFoundException(username);
};
}
@Bean
protected SecurityFilterChain securityFilterChain(final HttpSecurity http) throws Exception {
http.httpBasic(basic -> basic.disable())
.csrf(csrf -> csrf.disable())
.cors(cors -> {})
.authorizeHttpRequests(auth -> auth
.requestMatchers(aAnonymousPage_).anonymous()
.requestMatchers(aAuthenticatedPage_).authenticated()
.requestMatchers("/css/**", "/images/**", "/js/**", "/report/**").permitAll()
.anyRequest().authenticated()
)
.formLogin(form -> form
.loginPage(sLoginPage_)
.loginProcessingUrl(sLoginPage_)
.successHandler(authenticationSuccessHandler(sLoginSuccessUrl_))
// .successForwardUrl(sLoginSuccessUrl_)
.failureHandler(authenticationFailureHandler(sLoginPage_))
// .failureUrl(sLoginPage_)
)
.logout(logout -> logout
.logoutUrl(sLogoutUrl_)
.logoutSuccessHandler(logoutSuccessHandler(sLoginPage_))
// .logoutSuccessUrl(sLoginSuccessUrl_)
.deleteCookies("JSESSIONID")
);
return http.build();
}
@Bean
public AuthenticationSuccessHandler authenticationSuccessHandler(String sForwardTarget) {
return new jp.co.nisz.linic3.config.websecurity.AuthenticationSuccessHandler(sForwardTarget);
}
@Bean
public AuthenticationFailureHandler authenticationFailureHandler(String sForwardTarget) {
return new jp.co.nisz.linic3.config.websecurity.AuthenticationFailureHandler(sForwardTarget);
}
@Bean
public LogoutSuccessHandler logoutSuccessHandler(String sForwardTarget) {
return new jp.co.nisz.linic3.config.websecurity.LogoutSuccessHandler(sForwardTarget);
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
/**
* カンマ区切りの文字列をカンマで分割し、Listへ詰めて返します。
*
* @param カンマ区切りの文字列
* @return カンマで分割された文字列を持つList
*/
private List splitToken(String sTarget) {
List aRetVal = new ArrayList();
// 文字列がnull or 空白でない場合
if (NullChecker.check(sTarget) == false) {
StringTokenizer tokens = new StringTokenizer(sTarget, ", ", false);
while (tokens.hasMoreTokens()) {
aRetVal.add(tokens.nextToken());
}
}
return aRetVal;
}
}
Код: Выделить всё
ユーザーID
パスワード
Похоже, причина в следующем:
Код: Выделить всё
spring.thymeleaf.encoding=MS932
Подробнее здесь: https://stackoverflow.com/questions/798 ... gin-submit
Мобильная версия