package io.vertx.ext.web.handler;

import io.vertx.codegen.annotations.Fluent;
import io.vertx.codegen.annotations.VertxGen;
import io.vertx.core.Handler;
import io.vertx.core.Vertx;
import io.vertx.ext.web.RoutingContext;
import io.vertx.ext.web.handler.impl.CSRFHandlerImpl;

This handler adds a CSRF token to requests which mutate state. In order change the state a (XSRF-TOKEN) cookie is set with a unique token, that is expected to be sent back in a (X-XSRF-TOKEN) header. The behavior is to check the request body header and cookie for validity. This Handler requires session support, thus should be added somewhere below Session and Body handlers.
Author:Paulo Lopes
/** * This handler adds a CSRF token to requests which mutate state. In order change the state a (XSRF-TOKEN) cookie is set * with a unique token, that is expected to be sent back in a (X-XSRF-TOKEN) header. * * The behavior is to check the request body header and cookie for validity. * * This Handler requires session support, thus should be added somewhere below Session and Body handlers. * * @author Paulo Lopes */
@VertxGen public interface CSRFHandler extends Handler<RoutingContext> { String DEFAULT_COOKIE_NAME = "XSRF-TOKEN"; String DEFAULT_COOKIE_PATH = "/"; String DEFAULT_HEADER_NAME = "X-XSRF-TOKEN";
Instantiate a new CSRFHandlerImpl with a secret

CSRFHandler.create("s3cr37")
Params:
  • secret – server secret to sign the token.
/** * Instantiate a new CSRFHandlerImpl with a secret * <p> * <pre> * CSRFHandler.create("s3cr37") * </pre> * * @param secret server secret to sign the token. */
static CSRFHandler create(Vertx vertx, String secret) { return new CSRFHandlerImpl(vertx, secret); }
Set the origin for this server. When this value is set, extra validation will occur. The request must match the origin server, port and protocol.
Params:
  • origin – the origin for this server e.g.: https://www.foo.com.
Returns:fluent
/** * Set the origin for this server. When this value is set, extra validation will occur. The request * must match the origin server, port and protocol. * * @param origin the origin for this server e.g.: {@code https://www.foo.com}. * @return fluent */
@Fluent CSRFHandler setOrigin(String origin);
Set the cookie name. By default XSRF-TOKEN is used as it is the expected name by AngularJS however other frameworks might use other names.
Params:
  • name – a new name for the cookie.
Returns:fluent
/** * Set the cookie name. By default XSRF-TOKEN is used as it is the expected name by AngularJS however other frameworks * might use other names. * * @param name a new name for the cookie. * @return fluent */
@Fluent CSRFHandler setCookieName(String name);
Set the cookie path. By default / is used.
Params:
  • path – a new path for the cookie.
Returns:fluent
/** * Set the cookie path. By default / is used. * * @param path a new path for the cookie. * @return fluent */
@Fluent CSRFHandler setCookiePath(String path);
Set the cookie httpOnly attribute. When setting to false the CSRF handler will behave in Double Submit Cookie mode. When set to true then it will operate in Cookie-to-header mode. For more information https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#double-submit-cookie
Params:
  • httpOnly – a new name for the header.
Returns:fluent
/** * Set the cookie {@code httpOnly} attribute. When setting to {@code false} the CSRF handler will behave in * Double Submit Cookie mode. When set to {@code true} then it will operate in Cookie-to-header mode. * * For more information <a href="https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#double-submit-cookie">https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#double-submit-cookie</a> * * @param httpOnly a new name for the header. * @return fluent */
@Fluent CSRFHandler setCookieHttpOnly(boolean httpOnly);
Set the header name. By default X-XSRF-TOKEN is used as it is the expected name by AngularJS however other frameworks might use other names.
Params:
  • name – a new name for the header.
Returns:fluent
/** * Set the header name. By default X-XSRF-TOKEN is used as it is the expected name by AngularJS however other * frameworks might use other names. * * @param name a new name for the header. * @return fluent */
@Fluent CSRFHandler setHeaderName(String name);
Should the handler give warning messages if this handler is used in other than https protocols?
Params:
  • nag – true to nag
Returns:fluent
/** * Should the handler give warning messages if this handler is used in other than https protocols? * * @param nag true to nag * @return fluent */
@Fluent CSRFHandler setNagHttps(boolean nag);
Set the timeout for tokens generated by the handler, by default it uses the default from the session handler.
Params:
  • timeout – token timeout
Returns:fluent
/** * Set the timeout for tokens generated by the handler, by default it uses the default from the session handler. * * @param timeout token timeout * @return fluent */
@Fluent CSRFHandler setTimeout(long timeout); }