Commit a24a08d13eb05ff407db49b38ddb8f5e9862bde6
1 parent
bc6de58b
Melhoria no Rest, uso de cache-control
Showing
6 changed files
with
139 additions
and
72 deletions
Show diff stats
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/annotation/Cache.java
0 → 100644
| @@ -0,0 +1,29 @@ | @@ -0,0 +1,29 @@ | ||
| 1 | +/* | ||
| 2 | + * To change this license header, choose License Headers in Project Properties. | ||
| 3 | + * To change this template file, choose Tools | Templates | ||
| 4 | + * and open the template in the editor. | ||
| 5 | + */ | ||
| 6 | +package org.demoiselle.jee.ws.jaxrs.annotation; | ||
| 7 | + | ||
| 8 | +import static java.lang.annotation.ElementType.METHOD; | ||
| 9 | +import static java.lang.annotation.ElementType.TYPE; | ||
| 10 | +import java.lang.annotation.Inherited; | ||
| 11 | +import java.lang.annotation.Retention; | ||
| 12 | +import static java.lang.annotation.RetentionPolicy.RUNTIME; | ||
| 13 | +import java.lang.annotation.Target; | ||
| 14 | +import javax.enterprise.util.Nonbinding; | ||
| 15 | +import javax.interceptor.InterceptorBinding; | ||
| 16 | + | ||
| 17 | +/** | ||
| 18 | + * | ||
| 19 | + * @author 70744416353 | ||
| 20 | + */ | ||
| 21 | +@Inherited | ||
| 22 | +@InterceptorBinding | ||
| 23 | +@Target({ METHOD, TYPE }) | ||
| 24 | +@Retention(RUNTIME) | ||
| 25 | +public @interface Cache { | ||
| 26 | + | ||
| 27 | + @Nonbinding | ||
| 28 | + String value() default "max-age=9223372036854775807"; | ||
| 29 | +} |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/annotation/Cors.java
0 → 100644
| @@ -0,0 +1,26 @@ | @@ -0,0 +1,26 @@ | ||
| 1 | +/* | ||
| 2 | + * To change this license header, choose License Headers in Project Properties. | ||
| 3 | + * To change this template file, choose Tools | Templates | ||
| 4 | + * and open the template in the editor. | ||
| 5 | + */ | ||
| 6 | +package org.demoiselle.jee.ws.jaxrs.annotation; | ||
| 7 | + | ||
| 8 | +import static java.lang.annotation.ElementType.METHOD; | ||
| 9 | +import static java.lang.annotation.ElementType.TYPE; | ||
| 10 | +import java.lang.annotation.Inherited; | ||
| 11 | +import java.lang.annotation.Retention; | ||
| 12 | +import static java.lang.annotation.RetentionPolicy.RUNTIME; | ||
| 13 | +import java.lang.annotation.Target; | ||
| 14 | +import javax.enterprise.util.Nonbinding; | ||
| 15 | +import javax.interceptor.InterceptorBinding; | ||
| 16 | + | ||
| 17 | +/** | ||
| 18 | + * | ||
| 19 | + * @author 70744416353 | ||
| 20 | + */ | ||
| 21 | +@Inherited | ||
| 22 | +@InterceptorBinding | ||
| 23 | +@Target({METHOD, TYPE}) | ||
| 24 | +@Retention(RUNTIME) | ||
| 25 | +public @interface Cors { | ||
| 26 | +} |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/annotation/ValidatePayload.java
0 → 100644
| @@ -0,0 +1,25 @@ | @@ -0,0 +1,25 @@ | ||
| 1 | +/* | ||
| 2 | + * Demoiselle Framework | ||
| 3 | + * | ||
| 4 | + * License: GNU Lesser General Public License (LGPL), version 3 or later. | ||
| 5 | + * See the lgpl.txt file in the root directory or <https://www.gnu.org/licenses/lgpl.html>. | ||
| 6 | + */ | ||
| 7 | +package org.demoiselle.jee.ws.jaxrs.annotation; | ||
| 8 | + | ||
| 9 | +import static java.lang.annotation.ElementType.METHOD; | ||
| 10 | +import static java.lang.annotation.ElementType.TYPE; | ||
| 11 | +import static java.lang.annotation.RetentionPolicy.RUNTIME; | ||
| 12 | + | ||
| 13 | +import java.lang.annotation.Inherited; | ||
| 14 | +import java.lang.annotation.Retention; | ||
| 15 | +import java.lang.annotation.Target; | ||
| 16 | + | ||
| 17 | +import javax.interceptor.InterceptorBinding; | ||
| 18 | + | ||
| 19 | +@Inherited | ||
| 20 | +@InterceptorBinding | ||
| 21 | +@Target({ METHOD, TYPE }) | ||
| 22 | +@Retention(RUNTIME) | ||
| 23 | +public @interface ValidatePayload { | ||
| 24 | + | ||
| 25 | +} | ||
| 0 | \ No newline at end of file | 26 | \ No newline at end of file |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/filter/JaxRsFilter.java
| @@ -9,16 +9,16 @@ package org.demoiselle.jee.ws.jaxrs.filter; | @@ -9,16 +9,16 @@ package org.demoiselle.jee.ws.jaxrs.filter; | ||
| 9 | import java.util.logging.Logger; | 9 | import java.util.logging.Logger; |
| 10 | import javax.annotation.PostConstruct; | 10 | import javax.annotation.PostConstruct; |
| 11 | import javax.inject.Inject; | 11 | import javax.inject.Inject; |
| 12 | -import javax.ws.rs.client.ClientRequestContext; | ||
| 13 | -import javax.ws.rs.client.ClientRequestFilter; | ||
| 14 | -import javax.ws.rs.client.ClientResponseContext; | ||
| 15 | -import javax.ws.rs.client.ClientResponseFilter; | ||
| 16 | import javax.ws.rs.container.ContainerRequestContext; | 12 | import javax.ws.rs.container.ContainerRequestContext; |
| 17 | import javax.ws.rs.container.ContainerRequestFilter; | 13 | import javax.ws.rs.container.ContainerRequestFilter; |
| 18 | import javax.ws.rs.container.ContainerResponseContext; | 14 | import javax.ws.rs.container.ContainerResponseContext; |
| 19 | import javax.ws.rs.container.ContainerResponseFilter; | 15 | import javax.ws.rs.container.ContainerResponseFilter; |
| 20 | import javax.ws.rs.container.PreMatching; | 16 | import javax.ws.rs.container.PreMatching; |
| 17 | +import javax.ws.rs.container.ResourceInfo; | ||
| 18 | +import javax.ws.rs.core.Context; | ||
| 21 | import javax.ws.rs.ext.Provider; | 19 | import javax.ws.rs.ext.Provider; |
| 20 | +import org.demoiselle.jee.ws.jaxrs.annotation.Cache; | ||
| 21 | +import org.demoiselle.jee.ws.jaxrs.annotation.Cors; | ||
| 22 | 22 | ||
| 23 | /** | 23 | /** |
| 24 | * | 24 | * |
| @@ -26,18 +26,13 @@ import javax.ws.rs.ext.Provider; | @@ -26,18 +26,13 @@ import javax.ws.rs.ext.Provider; | ||
| 26 | */ | 26 | */ |
| 27 | @Provider | 27 | @Provider |
| 28 | @PreMatching | 28 | @PreMatching |
| 29 | -public class JaxRsFilter implements ClientRequestFilter, ClientResponseFilter, ContainerRequestFilter, ContainerResponseFilter { | 29 | +public class JaxRsFilter implements ContainerRequestFilter, ContainerResponseFilter { |
| 30 | 30 | ||
| 31 | @Inject | 31 | @Inject |
| 32 | private Logger LOG; | 32 | private Logger LOG; |
| 33 | 33 | ||
| 34 | - @Override | ||
| 35 | - public void filter(ClientRequestContext requestContext) { | ||
| 36 | - } | ||
| 37 | - | ||
| 38 | - @Override | ||
| 39 | - public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) { | ||
| 40 | - } | 34 | + @Context |
| 35 | + private ResourceInfo info; | ||
| 41 | 36 | ||
| 42 | @Override | 37 | @Override |
| 43 | public void filter(ContainerRequestContext requestContext) { | 38 | public void filter(ContainerRequestContext requestContext) { |
| @@ -45,6 +40,19 @@ public class JaxRsFilter implements ClientRequestFilter, ClientResponseFilter, C | @@ -45,6 +40,19 @@ public class JaxRsFilter implements ClientRequestFilter, ClientResponseFilter, C | ||
| 45 | 40 | ||
| 46 | @Override | 41 | @Override |
| 47 | public void filter(ContainerRequestContext requestContext, ContainerResponseContext response) { | 42 | public void filter(ContainerRequestContext requestContext, ContainerResponseContext response) { |
| 43 | + | ||
| 44 | + if (requestContext.getMethod().equals("GET")) { | ||
| 45 | + Cache max = info.getResourceMethod().getAnnotation(Cache.class); | ||
| 46 | + if (max != null) { | ||
| 47 | + response.getHeaders().putSingle("Cache-Control", max.value()); | ||
| 48 | + } | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | +// Cors cors = info.getResourceMethod().getAnnotation(Cors.class); | ||
| 52 | +// if (cors != null) { | ||
| 53 | +// response.getHeaders().putSingle("Cache-Control", max.value()); | ||
| 54 | +// } | ||
| 55 | + | ||
| 48 | response.getHeaders().putSingle("Demoiselle", "3.0.0"); | 56 | response.getHeaders().putSingle("Demoiselle", "3.0.0"); |
| 49 | response.getHeaders().putSingle("Access-Control-Allow-Origin", "*"); | 57 | response.getHeaders().putSingle("Access-Control-Allow-Origin", "*"); |
| 50 | response.getHeaders().putSingle("Access-Control-Allow-Methods", "OPTIONS, GET, POST, PUT, DELETE"); | 58 | response.getHeaders().putSingle("Access-Control-Allow-Methods", "OPTIONS, GET, POST, PUT, DELETE"); |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/interceptor/ValidatePayload.java
| @@ -1,25 +0,0 @@ | @@ -1,25 +0,0 @@ | ||
| 1 | -/* | ||
| 2 | - * Demoiselle Framework | ||
| 3 | - * | ||
| 4 | - * License: GNU Lesser General Public License (LGPL), version 3 or later. | ||
| 5 | - * See the lgpl.txt file in the root directory or <https://www.gnu.org/licenses/lgpl.html>. | ||
| 6 | - */ | ||
| 7 | -package org.demoiselle.jee.ws.jaxrs.interceptor; | ||
| 8 | - | ||
| 9 | -import static java.lang.annotation.ElementType.METHOD; | ||
| 10 | -import static java.lang.annotation.ElementType.TYPE; | ||
| 11 | -import static java.lang.annotation.RetentionPolicy.RUNTIME; | ||
| 12 | - | ||
| 13 | -import java.lang.annotation.Inherited; | ||
| 14 | -import java.lang.annotation.Retention; | ||
| 15 | -import java.lang.annotation.Target; | ||
| 16 | - | ||
| 17 | -import javax.interceptor.InterceptorBinding; | ||
| 18 | - | ||
| 19 | -@Inherited | ||
| 20 | -@InterceptorBinding | ||
| 21 | -@Target({ METHOD, TYPE }) | ||
| 22 | -@Retention(RUNTIME) | ||
| 23 | -public @interface ValidatePayload { | ||
| 24 | - | ||
| 25 | -} | ||
| 26 | \ No newline at end of file | 0 | \ No newline at end of file |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/interceptor/ValidatePayloadInterceptor.java
| @@ -6,12 +6,15 @@ | @@ -6,12 +6,15 @@ | ||
| 6 | */ | 6 | */ |
| 7 | package org.demoiselle.jee.ws.jaxrs.interceptor; | 7 | package org.demoiselle.jee.ws.jaxrs.interceptor; |
| 8 | 8 | ||
| 9 | +import org.demoiselle.jee.ws.jaxrs.annotation.ValidatePayload; | ||
| 9 | import java.io.Serializable; | 10 | import java.io.Serializable; |
| 10 | import java.util.HashSet; | 11 | import java.util.HashSet; |
| 11 | import java.util.Set; | 12 | import java.util.Set; |
| 13 | +import javax.annotation.Priority; | ||
| 12 | 14 | ||
| 13 | import javax.interceptor.AroundInvoke; | 15 | import javax.interceptor.AroundInvoke; |
| 14 | import javax.interceptor.Interceptor; | 16 | import javax.interceptor.Interceptor; |
| 17 | +import static javax.interceptor.Interceptor.Priority.APPLICATION; | ||
| 15 | import javax.interceptor.InvocationContext; | 18 | import javax.interceptor.InvocationContext; |
| 16 | import javax.validation.ConstraintViolation; | 19 | import javax.validation.ConstraintViolation; |
| 17 | import javax.validation.UnexpectedTypeException; | 20 | import javax.validation.UnexpectedTypeException; |
| @@ -24,40 +27,41 @@ import org.demoiselle.jee.ws.jaxrs.exception.DemoiselleRESTException; | @@ -24,40 +27,41 @@ import org.demoiselle.jee.ws.jaxrs.exception.DemoiselleRESTException; | ||
| 24 | 27 | ||
| 25 | @Interceptor | 28 | @Interceptor |
| 26 | @ValidatePayload | 29 | @ValidatePayload |
| 30 | +@Priority(APPLICATION) | ||
| 27 | public class ValidatePayloadInterceptor implements Serializable { | 31 | public class ValidatePayloadInterceptor implements Serializable { |
| 28 | 32 | ||
| 29 | - private static final long serialVersionUID = 1L; | ||
| 30 | - | ||
| 31 | - @AroundInvoke | ||
| 32 | - public Object manage(final InvocationContext ic) throws Exception { | ||
| 33 | - DemoiselleRESTException ex = new DemoiselleRESTException(); | ||
| 34 | - Set<ConstraintViolation<?>> violations = new HashSet<>(); | ||
| 35 | - for (Object params : ic.getParameters()) { | ||
| 36 | - if (params != null) { | ||
| 37 | - ValidatorFactory dfv = buildDefaultValidatorFactory(); | ||
| 38 | - Validator validator = dfv.getValidator(); | ||
| 39 | - try { | ||
| 40 | - violations.addAll(validator.validate(params)); | ||
| 41 | - for (ConstraintViolation<?> violation : violations) { | ||
| 42 | - String field = (violation.getRootBeanClass().getSimpleName() + "_" | ||
| 43 | - + violation.getPropertyPath()).toLowerCase(); | ||
| 44 | - // GPMessage msg = | ||
| 45 | - // GPMessage.INVALID_FIELD_P1.setSufix(violation.getConstraintDescriptor() | ||
| 46 | - // .getAnnotation().annotationType().getSimpleName().toLowerCase()); | ||
| 47 | - | ||
| 48 | - ex.addMessage(field, violation.getMessage()); | ||
| 49 | - } | ||
| 50 | - } catch (UnexpectedTypeException cause) { | ||
| 51 | - // GPMessage msg = GPMessage.GENERAL_ERROR_P1; | ||
| 52 | - // msg.setParam(cause.getMessage()); | ||
| 53 | - throw new DemoiselleRESTException("ERRO GENERICO -> ALTERAR"); | ||
| 54 | - } | ||
| 55 | - } | ||
| 56 | - } | ||
| 57 | - | ||
| 58 | - if (!violations.isEmpty() && !ex.getMessages().isEmpty()) { | ||
| 59 | - throw ex; | ||
| 60 | - } | ||
| 61 | - return ic.proceed(); | ||
| 62 | - } | ||
| 63 | -} | ||
| 64 | \ No newline at end of file | 33 | \ No newline at end of file |
| 34 | + private static final long serialVersionUID = 1L; | ||
| 35 | + | ||
| 36 | + @AroundInvoke | ||
| 37 | + public Object manage(final InvocationContext ic) throws Exception { | ||
| 38 | + DemoiselleRESTException ex = new DemoiselleRESTException(); | ||
| 39 | + Set<ConstraintViolation<?>> violations = new HashSet<>(); | ||
| 40 | + for (Object params : ic.getParameters()) { | ||
| 41 | + if (params != null) { | ||
| 42 | + ValidatorFactory dfv = buildDefaultValidatorFactory(); | ||
| 43 | + Validator validator = dfv.getValidator(); | ||
| 44 | + try { | ||
| 45 | + violations.addAll(validator.validate(params)); | ||
| 46 | + for (ConstraintViolation<?> violation : violations) { | ||
| 47 | + String field = (violation.getRootBeanClass().getSimpleName() + "_" | ||
| 48 | + + violation.getPropertyPath()).toLowerCase(); | ||
| 49 | + // GPMessage msg = | ||
| 50 | + // GPMessage.INVALID_FIELD_P1.setSufix(violation.getConstraintDescriptor() | ||
| 51 | + // .getAnnotation().annotationType().getSimpleName().toLowerCase()); | ||
| 52 | + | ||
| 53 | + ex.addMessage(field, violation.getMessage()); | ||
| 54 | + } | ||
| 55 | + } catch (UnexpectedTypeException cause) { | ||
| 56 | + // GPMessage msg = GPMessage.GENERAL_ERROR_P1; | ||
| 57 | + // msg.setParam(cause.getMessage()); | ||
| 58 | + throw new DemoiselleRESTException("ERRO GENERICO -> ALTERAR"); | ||
| 59 | + } | ||
| 60 | + } | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + if (!violations.isEmpty() && !ex.getMessages().isEmpty()) { | ||
| 64 | + throw ex; | ||
| 65 | + } | ||
| 66 | + return ic.proceed(); | ||
| 67 | + } | ||
| 68 | +} |