Preloader image

Help us document this example! Click the blue pencil icon in the upper right to edit this page.

Using CDI beans in a Servlet Filter

This is a simple example to demonstrate using CDI beans in a Servlet Filter. This example comprises four Java Classes:

  • Counter - this is an Application Scoped CDI bean to provide a global counter

  • RequestRole - this is a Request Scoped CDI bean which holds a role name. This bean is injected into a filter to set the role name, and into a JAX-RS endpoint to read it

  • ExampleFilter - Example Servlet Filter to set the rolename on the Request Role

  • ExampleEndpoint - JAX-RS endpoint that reads the rolename on the Request Role

public class Counter {

    private final AtomicInteger count = new AtomicInteger(0);

    public int get() {
        return count.incrementAndGet();

public class RequestRole {

    private String role;

    public RequestRole() {

    public String getRole() {
        return role;

    public void setRole(final String role) {
        this.role = role;
@WebFilter(urlPatterns = "/*")
public class ExampleFilter implements Filter {

    private RequestRole requestRole;

    @Inject Counter counter;

    public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
        requestRole.setRole("sample-role-" + counter.get());
        chain.doFilter(request, response);
public class ExampleEndpoint {

	private RequestRole requestRole;

	public String get(@Context HttpServletRequest request) {
		return requestRole.getRole();


Steps to replicate: