package org.jboss.resteasy.security.doseta;

import java.io.IOException;

import javax.annotation.Priority;
import javax.ws.rs.ConstrainedTo;
import javax.ws.rs.Priorities;
import javax.ws.rs.RuntimeType;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.container.DynamicFeature;
import javax.ws.rs.container.ResourceInfo;
import javax.ws.rs.core.FeatureContext;

import org.jboss.resteasy.annotations.security.doseta.Signed;
import org.jboss.resteasy.core.ResteasyContext;

Author:Bill Burke
Version:$Revision: 1 $
/** * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a> * @version $Revision: 1 $ */
@ConstrainedTo(RuntimeType.SERVER) public class ServerDigitalSigningHeaderDecoratorFeature implements DynamicFeature { @Override public void configure(ResourceInfo resourceInfo, FeatureContext configurable) { Signed signed = resourceInfo.getResourceMethod().getAnnotation(Signed.class); if (signed == null) { signed = (Signed) resourceInfo.getResourceClass().getAnnotation(Signed.class); } if (signed == null) return; configurable.register(new DigitalSigningHeaderDecorator(signed)); }
Author:Bill Burke
Version:$Revision: 1 $
/** * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a> * @version $Revision: 1 $ */
@Priority(Priorities.HEADER_DECORATOR) public static class DigitalSigningHeaderDecorator extends AbstractDigitalSigningHeaderDecorator implements ContainerResponseFilter { public DigitalSigningHeaderDecorator(final Signed signed) { this.signed = signed; } @Override public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException { KeyRepository repository = ResteasyContext.getContextData(KeyRepository.class); DKIMSignature header = createHeader(repository); responseContext.getHeaders().add(DKIMSignature.DKIM_SIGNATURE, header); } } }