Spring Security с 5 на 7 миграция, ошибка 404, отправка входа в системуJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Spring Security с 5 на 7 миграция, ошибка 404, отправка входа в систему

Сообщение Anonymous »

Я обновляюсь с Java 17 до 25, Spring Framework 5.3.39 до 7.0.3.
Всякий раз, когда я пытаюсь отправить учетные данные через страницу входа, я получаю ошибку 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;
}
}
login.html

Код: Выделить всё




ユーザーID





パスワード












Обновление от 28 января 2025 г.
Похоже, причина в следующем:

Код: Выделить всё

spring.thymeleaf.encoding=MS932
Я не могу войти в систему, если указанный выше параметр включен в мои application.properties. Кто-нибудь знает почему?

Подробнее здесь: https://stackoverflow.com/questions/798 ... gin-submit
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»