Измените Rememberme-Cook ie в веб-фильтре - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь изменить домен и путь к Cook ie в веб-фильтре.
Cook ie добавлен в ответ Soteria RememberMeInterceptor.

Это мой Webfilter:

@WebFilter(filterName = "DomainCookieFilter",
            urlPatterns = {"/*"},
            dispatcherTypes = {DispatcherType.ASYNC, DispatcherType.REQUEST})
public class DomainCookieFilter implements Filter {
    
    private static Logger logger = Logger.getLogger(DomainCookieFilter.class.getSimpleName());

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        logger.info("DomainCookieFilter invoked!!!");
        chain.doFilter(request, new DomainCookieResponseWrapper((HttpServletResponse) response));

    }
}

А это ResponseWrapper:
public class DomainCookieResponseWrapper extends HttpServletResponseWrapper {
    
    private static Logger logger = Logger.getLogger(DomainCookieResponseWrapper.class.getSimpleName());

    public DomainCookieResponseWrapper(HttpServletResponse response) {
        super(response);
    }

    @Override
    public void addCookie(Cookie cookie) {
        logger.info("Add Cookie: " + cookie.getName());
        if(cookie.getName().equals("JREMEMBERMEID") && cookie.getMaxAge() != 0) {
            cookie.setDomain(".domain.local");
            cookie.setPath("/");
            logger.info("Add Cookie: changed Domain");
        }
        super.addCookie(cookie);
    }
}

DomainCookieResponseWrapper.addCook ie -Метод никогда не вызывается, и я не понимаю почему.
Так что же мне здесь не хватает?

1 Ответ

0 голосов
/ 10 августа 2020

Спустя несколько попыток я пришел к выводу, что запросы аутентификации не фильтруются.
Я наконец придумал другой подход.
Я написал другой RemembermeInterceptor, предшествующий заданному по умолчанию, в котором Response заменен моим Responsewrapper.

@Interceptor
@RememberMe
@Priority(PLATFORM_BEFORE + 209)
public class PreRememberMeInterceptor implements Serializable {

    private static final long serialVersionUID = 1L;

    @AroundInvoke
    public Object intercept(InvocationContext ctx) throws Exception {
        
        Object[] newParams = { ctx.getParameters()[0],
                new DomainCookieResponseWrapper((HttpServletResponse) ctx.getParameters()[1]), 
                ctx.getParameters()[2] };
        
        ctx.setParameters(newParams);

        return ctx.proceed();
    }

}

Возможно, это не лучшее Решение, но оно работает.
Если у кого-то есть лучший подход, дайте мне знать.

...