У меня есть tokenValiditySeconds
набор в Config.groovy
вКак настроить пользовательский тайм-аут для того, чтобы помнить, что я купил в grails spring security?
grails.plugins.springsecurity.rememberMe.tokenValiditySeconds=31*24*60*60
Однако я хочу, чтобы установить различные действия для всех запросов, что исходит от, скажем, суб-домен. Я могу определить информацию о домене с объекта request
, но я не могу переопределить tokenValiditySeconds
из класса CustomRememberMeService
.
По умолчанию токены будут действительны в течение 14 дней с последней успешной попытки аутентификации . Это можно изменить с помощью AbstractRememberMeServices.setTokenValiditySeconds (int). Если это значение меньше нуля, время истечения будет оставаться в 14 дней, но отрицательное значение будет использовано для свойства maxAge файла cookie, , что означает, что он не будет сохранен при закрытии браузера.
Согласно документации, я должен иметь возможность изменить срок действия с использованием метода setTokenValiditySeconds(int)
, но он не имеет никакого эффекта.
Итак, как переопределить значение, заданное в файле конфигурации?
Спасибо.
Edit:
class CustomRememberMeService extends TokenBasedRememberMeServices {
def springSecurityService;
public final LoggedInUserDetails customAutoLogin(HttpServletRequest request, HttpServletResponse response) {
def cookies = request.getCookies();
if (!cookies) return null;
String rememberMeCookie = extractRememberMeCookie(request);
for (int i = 0; i < cookies.length; i++) {
Cookie c = cookies[i];
if(c.getName().equals('remember_me') && rememberMeCookie == null) {
rememberMeCookie = c.getValue();
}
}
if (rememberMeCookie == null) return null
logger.debug("rememberMeCookie is : ${rememberMeCookie}");
if (rememberMeCookie.length() == 0) {
cancelCookie(request, response);
return null;
}
String[] cookieTokens = decodeCookie(rememberMeCookie);
String username = cookieTokens[0];
def loginContext = request.getParameter('loginContext')
loginContext = (loginContext == null) ? "mainWeb" : loginContext
setTokenValiditySeconds(60) // not working
LoggedInUserDetails user = getUserDetailsService().loadUserByUsername("${username}#${request.getServerName().trim()}#${loginContext}")
springSecurityService.reauthenticate("${username}#${request.getServerName().trim()}#${loginContext}")
}
}
resource.groovy файл выглядит следующим образом:
//..
customRememberMeService(com.rwi.springsecurity.services.CustomRememberMeService) {
userDetailsService = ref('userDetailsService')
springSecurityService = ref('springSecurityService')
key = "${grailsApplication.config.grails.plugins.springsecurity.rememberMe.key}"
}
customRememberMeServicesFilter(CustomRememberMeServicesFilter){
authenticationManager = ref('authenticationManager')
rememberMeServices = ref('rememberMeServices')
customRememberMeService = ref('customRememberMeService')
}
//..
CustomRemeberMEService.groovy
// ..
class CustomRememberMeServicesFilter extends RememberMeAuthenticationFilter {
def customRememberMeService;
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
if (SecurityContextHolder.getContext().getAuthentication() == null) {
LoggedInUserDetails rememberMeAuth = customRememberMeService.customAutoLogin(request, response);
}
chain.doFilter(request, response);
}
}
вы можете показать свой CustomRememberMyService и как вы его регистрации (например ваш конф/весна/resources.groovy) – ikumen
user2264997: ок. Я обновлю его. В настоящее время я далеко от кода. – boring
Обновите вопрос, чтобы включить текущий код. – boring