fix remmeber me (#2184)

* fix remmeber me

* remove uselss comment

* Update translation files (#2185)

Signed-off-by: GitHub Action <action@github.com>
Co-authored-by: GitHub Action <action@github.com>

---------

Signed-off-by: GitHub Action <action@github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <action@github.com>
This commit is contained in:
Anthony Stirling 2024-11-05 14:31:31 +00:00 committed by GitHub
parent 40ffb6559d
commit 0c0f61aa0d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 24 additions and 15 deletions

View File

@ -156,10 +156,14 @@ public class SecurityConfiguration {
http.rememberMe( http.rememberMe(
rememberMeConfigurer -> rememberMeConfigurer ->
rememberMeConfigurer // Use the configurator directly rememberMeConfigurer // Use the configurator directly
.key("uniqueAndSecret")
.tokenRepository(persistentTokenRepository()) .tokenRepository(persistentTokenRepository())
.tokenValiditySeconds(1209600) // 2 weeks .tokenValiditySeconds(14 * 24 * 60 * 60) // 14 days
); .userDetailsService(
userDetailsService) // Your existing UserDetailsService
.useSecureCookie(true) // Enable secure cookie
.rememberMeParameter("remember-me") // Form parameter name
.rememberMeCookieName("remember-me") // Cookie name
.alwaysRemember(false));
http.authorizeHttpRequests( http.authorizeHttpRequests(
authz -> authz ->
authz.requestMatchers( authz.requestMatchers(

View File

@ -5,6 +5,7 @@ import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.web.authentication.rememberme.PersistentRememberMeToken; import org.springframework.security.web.authentication.rememberme.PersistentRememberMeToken;
import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository; import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository;
import org.springframework.transaction.annotation.Transactional;
import stirling.software.SPDF.model.PersistentLogin; import stirling.software.SPDF.model.PersistentLogin;
@ -13,6 +14,7 @@ public class JPATokenRepositoryImpl implements PersistentTokenRepository {
@Autowired private PersistentLoginRepository persistentLoginRepository; @Autowired private PersistentLoginRepository persistentLoginRepository;
@Override @Override
@Transactional
public void createNewToken(PersistentRememberMeToken token) { public void createNewToken(PersistentRememberMeToken token) {
PersistentLogin newToken = new PersistentLogin(); PersistentLogin newToken = new PersistentLogin();
newToken.setSeries(token.getSeries()); newToken.setSeries(token.getSeries());
@ -23,6 +25,7 @@ public class JPATokenRepositoryImpl implements PersistentTokenRepository {
} }
@Override @Override
@Transactional
public void updateToken(String series, String tokenValue, Date lastUsed) { public void updateToken(String series, String tokenValue, Date lastUsed) {
PersistentLogin existingToken = persistentLoginRepository.findById(series).orElse(null); PersistentLogin existingToken = persistentLoginRepository.findById(series).orElse(null);
if (existingToken != null) { if (existingToken != null) {
@ -43,11 +46,11 @@ public class JPATokenRepositoryImpl implements PersistentTokenRepository {
} }
@Override @Override
@Transactional
public void removeUserTokens(String username) { public void removeUserTokens(String username) {
for (PersistentLogin token : persistentLoginRepository.findAll()) { try {
if (token.getUsername().equals(username)) { persistentLoginRepository.deleteByUsername(username);
persistentLoginRepository.delete(token); } catch (Exception e) {
}
} }
} }
} }

View File

@ -6,4 +6,6 @@ import org.springframework.stereotype.Repository;
import stirling.software.SPDF.model.PersistentLogin; import stirling.software.SPDF.model.PersistentLogin;
@Repository @Repository
public interface PersistentLoginRepository extends JpaRepository<PersistentLogin, String> {} public interface PersistentLoginRepository extends JpaRepository<PersistentLogin, String> {
void deleteByUsername(String username);
}

View File

@ -527,7 +527,7 @@ replace-color.selectText.8=Zlutý text na černém pozadí
replace-color.selectText.9=Zelený text na černém pozadí replace-color.selectText.9=Zelený text na černém pozadí
replace-color.selectText.10=Vyberte barvu textu replace-color.selectText.10=Vyberte barvu textu
replace-color.selectText.11=Vyberte barvu pozadí replace-color.selectText.11=Vyberte barvu pozadí
replace-color.submit= Nahradit replace-color.submit=Nahradit

View File

@ -119,7 +119,7 @@ pipelineOptions.validateButton=Validér
enterpriseEdition.button=Opgrader til Pro enterpriseEdition.button=Opgrader til Pro
enterpriseEdition.warning=Denne funktion er kun tilgængelig for Pro-brugere. enterpriseEdition.warning=Denne funktion er kun tilgængelig for Pro-brugere.
enterpriseEdition.yamlAdvert=Stirling PDF Pro understøtter YAML-konfigurationsfiler og andre SSO-funktioner. enterpriseEdition.yamlAdvert=Stirling PDF Pro understøtter YAML-konfigurationsfiler og andre SSO-funktioner.
enterpriseEdition.ssoAdvert= søger du flere funktioner til brugerstyring? Prøv Stirling PDF Pro enterpriseEdition.ssoAdvert=søger du flere funktioner til brugerstyring? Prøv Stirling PDF Pro
################# #################

View File

@ -97,7 +97,7 @@ pipeline.configureButton=Configurar
pipeline.defaultOption=Personalizar pipeline.defaultOption=Personalizar
pipeline.submitButton=Submeter pipeline.submitButton=Submeter
pipeline.help=Pipeline Help pipeline.help=Pipeline Help
pipeline.scanHelp= Ajuda ao Escaneamento de Pastas pipeline.scanHelp=Ajuda ao Escaneamento de Pastas
pipeline.deletePrompt=Tem a certeza que quer eliminar o pipeline? pipeline.deletePrompt=Tem a certeza que quer eliminar o pipeline?
###################### ######################
@ -191,7 +191,7 @@ account.changePassword=Alterar a Senha
account.confirmNewPassword=Confirmar Nova Senha account.confirmNewPassword=Confirmar Nova Senha
account.signOut=Sair do Sistema account.signOut=Sair do Sistema
account.yourApiKey=Sua Chave API account.yourApiKey=Sua Chave API
account.syncTitle= sincronizar definições do navegador com a conta account.syncTitle=sincronizar definições do navegador com a conta
account.settingsCompare=Comparação das Definições: account.settingsCompare=Comparação das Definições:
account.property=Propriedade account.property=Propriedade
account.webBrowserSettings=Configurações do Navegador Web account.webBrowserSettings=Configurações do Navegador Web

View File

@ -359,7 +359,7 @@ PDFToHTML.tags=web content,browser friendly
home.PDFToXML.title=PDF в XML home.PDFToXML.title=PDF в XML
home.PDFToXML.desc=Преобразование PDF в формат XML home.PDFToXML.desc=Преобразование PDF в формат XML
PDFToXML.tags= extraksi data,структурированный контент,interop,преобразование,конвертация PDFToXML.tags=extraksi data,структурированный контент,interop,преобразование,конвертация
home.ScannerImageSplit.title=Обнаружение/разделение отсканированных фотографий home.ScannerImageSplit.title=Обнаружение/разделение отсканированных фотографий
home.ScannerImageSplit.desc=Разделяет несколько фотографий из фото/PDF home.ScannerImageSplit.desc=Разделяет несколько фотографий из фото/PDF

View File

@ -90,8 +90,8 @@
</div> </div>
<div class="form-check m-2 mb-3"> <div class="form-check m-2 mb-3">
<input type="checkbox" id="remember" value="remember-me"> <input type="checkbox" name="remember-me" id="remember-me">
<label for="remember" th:text="#{login.rememberme}"></label> <label for="remember-me" th:text="#{login.rememberme}"></label>
</div> </div>
<button class="w-100 btn btn-lg btn-primary" type="submit" th:text="#{login.signin}">Sign in</button> <button class="w-100 btn btn-lg btn-primary" type="submit" th:text="#{login.signin}">Sign in</button>
</form> </form>