Skip to content

innoq/spring-cookie

Repository files navigation

Spring Cookie

- Come to the dark side, we have cookies

Maven Central License Open Issues Build Status Code Coverage

Some components for Spring MVC that use cookies instead of a HTTP session.

Features

Quick Start

Download library through Maven:

<dependency>
  <groupId>com.innoq</groupId>
  <artifactId>spring-cookie</artifactId>
  <version>1.2.0</version>
</dependency>

1. Register as a Spring Bean

To enable cookie-based Flash attributes, register the CookieFlashMapManager as a Spring @Bean. You can customize the codec and signing mechanism:

@Configuration
public class FlashAttributeStrategy {

  @Bean
  public CookieFlashMapManager cookieFlashMapManager() {
    return new CookieFlashMapManager(
      JacksonFlashMapListCodec.create(),             // JSON serialization
      CookieValueSigner.hmacSha512(secretKeyBytes),  // Strong cookie signing
      "flash"                                        // Name of the cookie
    );
  }
}

Make sure to replace secretKeyBytes with a proper 64-byte key for HMAC-SHA-256 signing.

2. Usage in your application

This is a typical POST-to-GET redirect pattern: after a POST request performs an action, the user is redirected to a GET endpoint that displays a result message.

@PostMapping("/send-message")
public String updateChangeRequestStatus(final RedirectAttributes redirectAttributes) {
    final String message = sendMessage()
        ? "Okay, your message was submitted."
        : "Sending your message failed.";

    redirectAttributes.addFlashAttribute("message", message);
    return "redirect:/messages";
}

@GetMapping("/messages")
@ResponseBody
public String showMessage(@ModelAttribute("message") String message) {
    return message;
}

The message is transferred via an HTTP cookie rather than session storage – making it suitable for stateless environments or APIs.

Security Considerations

Spring Cookie stores serialized data directly in HTTP cookies. While this enables stateless architectures, it also introduces potential attack surfaces. To ensure safe use in production environments, follow these best practices:

1. Use a Strong Secret Key

The HMAC key should be at least 256 bits (32 bytes), preferably 512 bits (64 bytes) in length:

KeyGenerator keyGen = KeyGenerator.getInstance("HmacSHA256");
keyGen.init(512);
byte[] key = keyGen.generateKey().getEncoded();

Store and manage this key securely, ideally via environment variables or a vault.

2. Avoid Storing Sensitive Information

Even signed cookies are visible to the client. Do not store personal data, tokens, or confidential information in flash attributes.

OK: status messages like "Saved successfully.".

Avoid: user IDs, emails, access rights, etc.

Release History

See CHANGELOG.md

Code of Conduct

Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

License

Spring Cookie is Open Source software released under the Apache 2.0 license.

About

Some components for Spring MVC that use cookies instead of a HTTP session.

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •