Commit 4a702641e3edd7f9015b2748756cc719e03d3acb
1 parent
8d68a1f4
Segurança e ajustes nos pacotes
Showing
64 changed files
with
1417 additions
and
1661 deletions
Show diff stats
demoiselle-core/src/main/java/org/demoiselle/jee/core/annotation/Strategy.java
@@ -1,53 +0,0 @@ | @@ -1,53 +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.core.annotation; | ||
8 | -import static java.lang.annotation.ElementType.FIELD; | ||
9 | -import static java.lang.annotation.ElementType.METHOD; | ||
10 | -import static java.lang.annotation.ElementType.PARAMETER; | ||
11 | -import static java.lang.annotation.ElementType.TYPE; | ||
12 | -import static java.lang.annotation.RetentionPolicy.RUNTIME; | ||
13 | - | ||
14 | -import java.lang.annotation.Inherited; | ||
15 | -import java.lang.annotation.Retention; | ||
16 | -import java.lang.annotation.Target; | ||
17 | - | ||
18 | -import javax.inject.Qualifier; | ||
19 | - | ||
20 | -/** | ||
21 | - * | ||
22 | - * <p> | ||
23 | - * This literal marks a bean to be selected at runtime based on a priority system. | ||
24 | - * The user qualifies the injection point with this literal and then at runtime | ||
25 | - * the CDI engine will circle through all candidate subtypes to be injected | ||
26 | - * that are annotated with {@link Priority}. If there is only one subtype with the | ||
27 | - * highest priority then this one will be selected to be injected. | ||
28 | - * </p> | ||
29 | - * | ||
30 | - * <p> | ||
31 | - * This allows users to plug in libraries with new candidates and have them be selected | ||
32 | - * if their priority values are higher than the default values already present. One example | ||
33 | - * is the {@link org.demoiselle.security.Authorizer} type, the framework has a {@link org.demoiselle.internal.implementation.DefaultAuthorizer} | ||
34 | - * with {@link Priority#L1_PRIORITY the lowest priority} but the user can add libraries with new | ||
35 | - * implementations of {@link org.demoiselle.security.Authorizer} annotated with higher priorities, the code will | ||
36 | - * then automatically select these new implementations with no extra configuration. | ||
37 | - * </p> | ||
38 | - * | ||
39 | - * <p> | ||
40 | - * This annotation must be used with supported types. Usually this involves creating {@link javax.enterprise.inject.Produces} CDI | ||
41 | - * producer methods that will select the correct strategy. To create your own producer | ||
42 | - * methods that support strategy selection, use the utility {@linkplain org.demoiselle.internal.producer.StrategySelector}. | ||
43 | - * </p> | ||
44 | - * | ||
45 | - * @author SERPRO | ||
46 | - */ | ||
47 | -@Qualifier | ||
48 | -@Inherited | ||
49 | -@Retention(RUNTIME) | ||
50 | -@Target({ TYPE, FIELD, METHOD, PARAMETER }) | ||
51 | -public @interface Strategy { | ||
52 | - | ||
53 | -} |
demoiselle-core/src/main/java/org/demoiselle/jee/core/annotation/Type.java
@@ -1,60 +0,0 @@ | @@ -1,60 +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.core.annotation; | ||
8 | - | ||
9 | -import static java.lang.annotation.ElementType.FIELD; | ||
10 | -import static java.lang.annotation.ElementType.METHOD; | ||
11 | -import static java.lang.annotation.ElementType.PARAMETER; | ||
12 | -import static java.lang.annotation.ElementType.TYPE; | ||
13 | -import static java.lang.annotation.RetentionPolicy.RUNTIME; | ||
14 | - | ||
15 | -import java.lang.annotation.Inherited; | ||
16 | -import java.lang.annotation.Retention; | ||
17 | -import java.lang.annotation.Target; | ||
18 | - | ||
19 | -import javax.enterprise.util.Nonbinding; | ||
20 | -import javax.inject.Qualifier; | ||
21 | - | ||
22 | -/** | ||
23 | - * <p> | ||
24 | - * Type based non-binding qualifier. | ||
25 | - * </p> | ||
26 | - * | ||
27 | - * <p> | ||
28 | - * This annotation is used to qualify beans using a class type. | ||
29 | - * {@link javax.enterprise.inject.Produces} methods can then read this type and | ||
30 | - * use it to customize the bean creation process. | ||
31 | - * </p> | ||
32 | - * | ||
33 | - * <p> | ||
34 | - * The {@link #value()} attribute is non-binding, meaning multiple classes | ||
35 | - * qualified with this annotation, even with different values, will be | ||
36 | - * considered the same candidate for injection points. To avoid ambiguous | ||
37 | - * resolutions and select which candidate to choose usually you'll need a | ||
38 | - * producer method to read the type and select the best fitted candidate. | ||
39 | - * </p> | ||
40 | - * | ||
41 | - * <p> | ||
42 | - * The framework classes qualified with this annotation already have such | ||
43 | - * producers and the accepted values for this annotation will be detailed in | ||
44 | - * their respective documentations. | ||
45 | - * </p> | ||
46 | - * | ||
47 | - * | ||
48 | - * @author SERPRO | ||
49 | - * | ||
50 | - */ | ||
51 | -@Qualifier | ||
52 | -@Inherited | ||
53 | -@Retention(RUNTIME) | ||
54 | -@Target({ TYPE, FIELD, METHOD, PARAMETER }) | ||
55 | -public @interface Type { | ||
56 | - | ||
57 | - @Nonbinding | ||
58 | - Class<?> value() default Object.class; | ||
59 | - | ||
60 | -} |
demoiselle-core/src/main/java/org/demoiselle/jee/core/annotation/literal/StrategyQualifier.java
@@ -1,23 +0,0 @@ | @@ -1,23 +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.core.annotation.literal; | ||
8 | - | ||
9 | -import org.demoiselle.jee.core.annotation.Strategy; | ||
10 | - | ||
11 | -import javax.enterprise.util.AnnotationLiteral; | ||
12 | - | ||
13 | -/** | ||
14 | - * Annotation litteral that allows to create instances of the {@link Strategy} literal. The created instance can then be | ||
15 | - * used to call {@link javax.enterprise.inject.spi.CDI#select(Class subtype, java.lang.annotation.Annotation... qualifiers)}. | ||
16 | - * | ||
17 | - * @see javax.enterprise.inject.spi.CDI | ||
18 | - * @author SERPRO | ||
19 | - */ | ||
20 | -@SuppressWarnings("all") | ||
21 | -public class StrategyQualifier extends AnnotationLiteral<Strategy> implements Strategy { | ||
22 | - | ||
23 | -} |
demoiselle-core/src/main/java/org/demoiselle/jee/core/annotation/literal/TypeQualifier.java
@@ -1,41 +0,0 @@ | @@ -1,41 +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.core.annotation.literal; | ||
8 | - | ||
9 | -import org.demoiselle.jee.core.annotation.Type; | ||
10 | - | ||
11 | -import javax.enterprise.util.AnnotationLiteral; | ||
12 | - | ||
13 | -/** | ||
14 | - * Annotation litteral that allows to create instances of the {@link Type} | ||
15 | - * literal. The created instance can then be used to call | ||
16 | - * {@link javax.enterprise.inject.spi.CDI#select(Class subtype, java.lang.annotation.Annotation... qualifiers)}. | ||
17 | - * | ||
18 | - * @see javax.enterprise.inject.spi.CDI | ||
19 | - * @author SERPRO | ||
20 | - */ | ||
21 | -@SuppressWarnings("all") | ||
22 | -public class TypeQualifier extends AnnotationLiteral<Type> implements Type { | ||
23 | - | ||
24 | - private static final long serialVersionUID = 1L; | ||
25 | - | ||
26 | - private final Class<?> value; | ||
27 | - | ||
28 | - /** | ||
29 | - * Constructor with string value of name literal. | ||
30 | - * | ||
31 | - * @param value value of name literal. | ||
32 | - */ | ||
33 | - public TypeQualifier(Class<?> value) { | ||
34 | - this.value = value; | ||
35 | - } | ||
36 | - | ||
37 | - @Override | ||
38 | - public Class<?> value() { | ||
39 | - return this.value; | ||
40 | - } | ||
41 | -} |
demoiselle-core/src/main/java/org/demoiselle/jee/core/crud/package-info.java
@@ -1,11 +0,0 @@ | @@ -1,11 +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 | -/** | ||
8 | - * Esta pacote tem o objetivo de conter as classes relacionadas aos | ||
9 | - * facilitadores de CRUD do framework Demoiselle. | ||
10 | - */ | ||
11 | -package org.demoiselle.jee.core.crud; | ||
12 | \ No newline at end of file | 0 | \ No newline at end of file |
demoiselle-core/src/main/java/org/demoiselle/jee/core/interfaces/crud/package-info.java
0 → 100644
@@ -0,0 +1,11 @@ | @@ -0,0 +1,11 @@ | ||
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 | +/** | ||
8 | + * Esta pacote tem o objetivo de conter as classes relacionadas aos | ||
9 | + * facilitadores de CRUD do framework Demoiselle. | ||
10 | + */ | ||
11 | +package org.demoiselle.jee.core.interfaces.crud; | ||
0 | \ No newline at end of file | 12 | \ No newline at end of file |
demoiselle-core/src/main/java/org/demoiselle/jee/core/interfaces/persistence/package-info.java
0 → 100644
@@ -0,0 +1,11 @@ | @@ -0,0 +1,11 @@ | ||
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 | +/** | ||
8 | + * Esta pacote tem o objetivo de conter as classes relacionadas aos | ||
9 | + * facilitadores de CRUD do framework Demoiselle. | ||
10 | + */ | ||
11 | +package org.demoiselle.jee.core.interfaces.persistence; | ||
0 | \ No newline at end of file | 12 | \ No newline at end of file |
demoiselle-core/src/main/java/org/demoiselle/jee/core/interfaces/security/DemoisellePrincipal.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.core.interfaces.security; | ||
7 | + | ||
8 | +import java.security.Principal; | ||
9 | +import java.util.List; | ||
10 | +import java.util.Map; | ||
11 | + | ||
12 | +/** | ||
13 | + * | ||
14 | + * @author 70744416353 | ||
15 | + */ | ||
16 | +public interface DemoisellePrincipal extends Principal { | ||
17 | + | ||
18 | + public String getId(); | ||
19 | + | ||
20 | + public void setId(String id); | ||
21 | + | ||
22 | + public void setName(String name); | ||
23 | + | ||
24 | + public void setRoles(List<String> roles); | ||
25 | + | ||
26 | + public List<String> getRoles(); | ||
27 | + | ||
28 | + public Map<String, String> getPermissions(); | ||
29 | +} |
demoiselle-core/src/main/java/org/demoiselle/jee/core/interfaces/security/SecurityContext.java
0 → 100644
@@ -0,0 +1,73 @@ | @@ -0,0 +1,73 @@ | ||
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.core.interfaces.security; | ||
8 | + | ||
9 | +import java.io.Serializable; | ||
10 | +import java.security.Principal; | ||
11 | +import java.util.List; | ||
12 | +import java.util.Map; | ||
13 | + | ||
14 | +/** | ||
15 | + * <p> | ||
16 | + * Structure used to handle both authentication and authorizations mechanisms. | ||
17 | + * </p> | ||
18 | + * | ||
19 | + * @author SERPRO | ||
20 | + */ | ||
21 | +public interface SecurityContext extends Serializable { | ||
22 | + | ||
23 | + /** | ||
24 | + * Checks if a specific user is logged in. | ||
25 | + * | ||
26 | + * @return {@code true} if the user is logged in | ||
27 | + */ | ||
28 | + boolean isLoggedIn(); | ||
29 | + | ||
30 | + /** | ||
31 | + * @throws NotLoggedInException if there is no user logged in a specific | ||
32 | + * session | ||
33 | + */ | ||
34 | + void checkLoggedIn(); | ||
35 | + | ||
36 | + /** | ||
37 | + * Checks if the logged user has permission to execute an specific operation | ||
38 | + * on a specific resource. | ||
39 | + * | ||
40 | + * @param resource resource to be checked | ||
41 | + * @param operation operation to be checked | ||
42 | + * @return {@code true} if the user has the permission | ||
43 | + * @throws AuthorizationException When the permission checking fails, this | ||
44 | + * exception is thrown. | ||
45 | + * @throws NotLoggedInException if there is no user logged in a specific | ||
46 | + * session. | ||
47 | + */ | ||
48 | + boolean hasPermission(String resource, String operation); | ||
49 | + | ||
50 | + /** | ||
51 | + * Checks if the logged user has an specific role | ||
52 | + * | ||
53 | + * @param role role to be checked | ||
54 | + * @return {@code true} if the user has the role | ||
55 | + * @throws AuthorizationException When the permission checking fails, this | ||
56 | + * exception is thrown. | ||
57 | + * @throws NotLoggedInException if there is no user logged in a specific | ||
58 | + * session. | ||
59 | + */ | ||
60 | + boolean hasRole(String role); | ||
61 | + | ||
62 | + /** | ||
63 | + * Return the user logged in the session. | ||
64 | + * | ||
65 | + * @param token | ||
66 | + * @return the user logged in a specific authenticated session. If there is | ||
67 | + * no active session {@code null} is returned. | ||
68 | + */ | ||
69 | + Principal getUser(); | ||
70 | + | ||
71 | + void setUser(Principal loggedUser); | ||
72 | + | ||
73 | +} |
demoiselle-core/src/main/java/org/demoiselle/jee/core/interfaces/security/Token.java
0 → 100644
@@ -0,0 +1,21 @@ | @@ -0,0 +1,21 @@ | ||
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.core.interfaces.security; | ||
7 | + | ||
8 | +/** | ||
9 | + * | ||
10 | + * @author 70744416353 | ||
11 | + */ | ||
12 | +public interface Token { | ||
13 | + | ||
14 | + public String getKey(); | ||
15 | + | ||
16 | + public void setKey(String key); | ||
17 | + | ||
18 | + public String getType(); | ||
19 | + | ||
20 | + public void setType(String type); | ||
21 | +} |
demoiselle-core/src/main/java/org/demoiselle/jee/core/interfaces/security/TokensManager.java
0 → 100644
@@ -0,0 +1,29 @@ | @@ -0,0 +1,29 @@ | ||
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.core.interfaces.security; | ||
8 | + | ||
9 | +import java.io.Serializable; | ||
10 | +import java.security.Principal; | ||
11 | +import java.util.List; | ||
12 | +import java.util.Map; | ||
13 | + | ||
14 | +/** | ||
15 | + * <p> | ||
16 | + * Structure used to handle both authentication and authorizations mechanisms. | ||
17 | + * </p> | ||
18 | + * | ||
19 | + * @author SERPRO | ||
20 | + */ | ||
21 | +public interface TokensManager extends Serializable { | ||
22 | + | ||
23 | + public Principal getUser(); | ||
24 | + | ||
25 | + public void setUser(Principal user); | ||
26 | + | ||
27 | + public boolean validate(); | ||
28 | + | ||
29 | +} |
demoiselle-core/src/main/java/org/demoiselle/jee/core/interfaces/ws/package-info.java
0 → 100644
@@ -0,0 +1,11 @@ | @@ -0,0 +1,11 @@ | ||
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 | +/** | ||
8 | + * Esta pacote tem o objetivo de conter as classes relacionadas aos | ||
9 | + * facilitadores de CRUD do framework Demoiselle. | ||
10 | + */ | ||
11 | +package org.demoiselle.jee.core.interfaces.ws; | ||
0 | \ No newline at end of file | 12 | \ No newline at end of file |
demoiselle-core/src/main/java/org/demoiselle/jee/core/message/DemoiselleMessages.java
0 → 100644
@@ -0,0 +1,57 @@ | @@ -0,0 +1,57 @@ | ||
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.core.message; | ||
8 | + | ||
9 | +import org.apache.deltaspike.core.api.message.MessageBundle; | ||
10 | +import org.apache.deltaspike.core.api.message.MessageTemplate; | ||
11 | + | ||
12 | +@MessageBundle | ||
13 | +public interface DemoiselleMessages { | ||
14 | + | ||
15 | + @MessageTemplate("{version}") | ||
16 | + String version(); | ||
17 | + | ||
18 | + @MessageTemplate("{engine-on}") | ||
19 | + String engineOn(); | ||
20 | + | ||
21 | + @MessageTemplate("{resource-not-found}") | ||
22 | + String resourceNotFound(); | ||
23 | + | ||
24 | + @MessageTemplate("{key-not-found}") | ||
25 | + String keyNotFound(String key); | ||
26 | + | ||
27 | + @MessageTemplate("{ambiguous-strategy-resolution}") | ||
28 | + String ambiguousStrategyResolution(String interfaceString, String implementations); | ||
29 | + | ||
30 | + @MessageTemplate("{ambiguous-bean-resolution}") | ||
31 | + String ambiguousBeanResolution(String implementation); | ||
32 | + | ||
33 | + @MessageTemplate("{bean-not-found}") | ||
34 | + String beanNotFound(String bean); | ||
35 | + | ||
36 | + @MessageTemplate("{store-not-found}") | ||
37 | + String storeNotFound(String object, String scope); | ||
38 | + | ||
39 | + @MessageTemplate("{more-than-one-exceptionhandler-defined-for-same-class}") | ||
40 | + String moreThanOneExceptionhandlerDefinedForSameClass(String clazz, String ex); | ||
41 | + | ||
42 | + @MessageTemplate("{handling-exception}") | ||
43 | + String handlingException(String ex); | ||
44 | + | ||
45 | + @MessageTemplate("{taking-off}") | ||
46 | + String takingOff(); | ||
47 | + | ||
48 | + @MessageTemplate("{engine-off}") | ||
49 | + String engineOff(String ex); | ||
50 | + | ||
51 | + @MessageTemplate("{setting-up-bean-manager}") | ||
52 | + String settingUpBeanManagerException(String util); | ||
53 | + | ||
54 | + @MessageTemplate("{processing-fail}") | ||
55 | + String processingFail(); | ||
56 | + | ||
57 | +} | ||
0 | \ No newline at end of file | 58 | \ No newline at end of file |
demoiselle-core/src/main/java/org/demoiselle/jee/core/messages/DemoiselleMessages.java
@@ -1,57 +0,0 @@ | @@ -1,57 +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.core.messages; | ||
8 | - | ||
9 | -import org.apache.deltaspike.core.api.message.MessageBundle; | ||
10 | -import org.apache.deltaspike.core.api.message.MessageTemplate; | ||
11 | - | ||
12 | -@MessageBundle | ||
13 | -public interface DemoiselleMessages { | ||
14 | - | ||
15 | - @MessageTemplate("{version}") | ||
16 | - String version(); | ||
17 | - | ||
18 | - @MessageTemplate("{engine-on}") | ||
19 | - String engineOn(); | ||
20 | - | ||
21 | - @MessageTemplate("{resource-not-found}") | ||
22 | - String resourceNotFound(); | ||
23 | - | ||
24 | - @MessageTemplate("{key-not-found}") | ||
25 | - String keyNotFound(String key); | ||
26 | - | ||
27 | - @MessageTemplate("{ambiguous-strategy-resolution}") | ||
28 | - String ambiguousStrategyResolution(String interfaceString, String implementations); | ||
29 | - | ||
30 | - @MessageTemplate("{ambiguous-bean-resolution}") | ||
31 | - String ambiguousBeanResolution(String implementation); | ||
32 | - | ||
33 | - @MessageTemplate("{bean-not-found}") | ||
34 | - String beanNotFound(String bean); | ||
35 | - | ||
36 | - @MessageTemplate("{store-not-found}") | ||
37 | - String storeNotFound(String object, String scope); | ||
38 | - | ||
39 | - @MessageTemplate("{more-than-one-exceptionhandler-defined-for-same-class}") | ||
40 | - String moreThanOneExceptionhandlerDefinedForSameClass(String clazz, String ex); | ||
41 | - | ||
42 | - @MessageTemplate("{handling-exception}") | ||
43 | - String handlingException(String ex); | ||
44 | - | ||
45 | - @MessageTemplate("{taking-off}") | ||
46 | - String takingOff(); | ||
47 | - | ||
48 | - @MessageTemplate("{engine-off}") | ||
49 | - String engineOff(String ex); | ||
50 | - | ||
51 | - @MessageTemplate("{setting-up-bean-manager}") | ||
52 | - String settingUpBeanManagerException(String util); | ||
53 | - | ||
54 | - @MessageTemplate("{processing-fail}") | ||
55 | - String processingFail(); | ||
56 | - | ||
57 | -} | ||
58 | \ No newline at end of file | 0 | \ No newline at end of file |
demoiselle-core/src/main/java/org/demoiselle/jee/stereotype/BusinessController.java
@@ -1,36 +0,0 @@ | @@ -1,36 +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.stereotype; | ||
8 | - | ||
9 | -import javax.enterprise.inject.Stereotype; | ||
10 | -import java.lang.annotation.Inherited; | ||
11 | -import java.lang.annotation.Retention; | ||
12 | -import java.lang.annotation.Target; | ||
13 | - | ||
14 | -import static java.lang.annotation.ElementType.TYPE; | ||
15 | -import static java.lang.annotation.RetentionPolicy.RUNTIME; | ||
16 | - | ||
17 | -/** | ||
18 | - * Identifies a <b>business controller</b> class. Business controller objects typically implement the controller design | ||
19 | - * pattern, i.e., they contain no data elements but methods that orchestrate interaction among business entities. | ||
20 | - * <p> | ||
21 | - * A <i>Business Controller</i> is: | ||
22 | - * <ul> | ||
23 | - * <li>defined when annotated with {@code @BusinessController}</li> | ||
24 | - * <li>automatically injected whenever {@code @Inject} is used</li> | ||
25 | - * </ul> | ||
26 | - * | ||
27 | - * @author SERPRO | ||
28 | - * @see Controller | ||
29 | - */ | ||
30 | -@Controller | ||
31 | -@Stereotype | ||
32 | -@Inherited | ||
33 | -@Target(TYPE) | ||
34 | -@Retention(RUNTIME) | ||
35 | -public @interface BusinessController { | ||
36 | -} |
demoiselle-core/src/main/java/org/demoiselle/jee/stereotype/Controller.java
@@ -1,28 +0,0 @@ | @@ -1,28 +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.stereotype; | ||
8 | - | ||
9 | -import javax.interceptor.InterceptorBinding; | ||
10 | -import java.lang.annotation.Inherited; | ||
11 | -import java.lang.annotation.Retention; | ||
12 | -import java.lang.annotation.Target; | ||
13 | - | ||
14 | -import static java.lang.annotation.ElementType.METHOD; | ||
15 | -import static java.lang.annotation.ElementType.TYPE; | ||
16 | -import static java.lang.annotation.RetentionPolicy.RUNTIME; | ||
17 | - | ||
18 | -/** | ||
19 | - * Identifies a <b>controller</b> class or stereotype, the latter being most suitable for it. | ||
20 | - * | ||
21 | - * @author SERPRO | ||
22 | - */ | ||
23 | -@InterceptorBinding | ||
24 | -@Inherited | ||
25 | -@Target({ TYPE, METHOD }) | ||
26 | -@Retention(RUNTIME) | ||
27 | -public @interface Controller { | ||
28 | -} |
demoiselle-core/src/main/java/org/demoiselle/jee/stereotype/PersistenceController.java
@@ -1,37 +0,0 @@ | @@ -1,37 +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.stereotype; | ||
8 | - | ||
9 | -import javax.enterprise.inject.Stereotype; | ||
10 | -import java.lang.annotation.Inherited; | ||
11 | -import java.lang.annotation.Retention; | ||
12 | -import java.lang.annotation.Target; | ||
13 | - | ||
14 | -import static java.lang.annotation.ElementType.TYPE; | ||
15 | -import static java.lang.annotation.RetentionPolicy.RUNTIME; | ||
16 | - | ||
17 | -/** | ||
18 | - * Identifies a <b>persistence controller</b> class. A persistence controller is | ||
19 | - * a layer which provides simplified access to data stored in persistent storage | ||
20 | - * of some kind, such as an entity-relational database. | ||
21 | - * <p> | ||
22 | - * A <i>Persitence Controller</i> is: | ||
23 | - * <ul> | ||
24 | - * <li>defined when annotated with {@code @PersistenceController}</li> | ||
25 | - * <li>automatically injected whenever {@code @Inject} is used</li> | ||
26 | - * </ul> | ||
27 | - * | ||
28 | - * @author SERPRO | ||
29 | - * @see Controller | ||
30 | - */ | ||
31 | -@Controller | ||
32 | -@Stereotype | ||
33 | -@Inherited | ||
34 | -@Target(TYPE) | ||
35 | -@Retention(RUNTIME) | ||
36 | -public @interface PersistenceController { | ||
37 | -} |
demoiselle-core/src/main/java/org/demoiselle/jee/stereotype/RestController.java
@@ -1,36 +0,0 @@ | @@ -1,36 +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.stereotype; | ||
8 | - | ||
9 | -import javax.enterprise.inject.Stereotype; | ||
10 | -import java.lang.annotation.Inherited; | ||
11 | -import java.lang.annotation.Retention; | ||
12 | -import java.lang.annotation.Target; | ||
13 | - | ||
14 | -import static java.lang.annotation.ElementType.TYPE; | ||
15 | -import static java.lang.annotation.RetentionPolicy.RUNTIME; | ||
16 | - | ||
17 | -/** | ||
18 | - * Identifies a <b>facade</b> class. A facade is an object that provides a | ||
19 | - * simplified interface to a larger body of code, such as a class library. | ||
20 | - * <p> | ||
21 | - * A <i>Facade</i> is: | ||
22 | - * <ul> | ||
23 | - * <li>defined when annotated with {@code @FacadeController}</li> | ||
24 | - * <li>automatically injected whenever {@code @Inject} is used</li> | ||
25 | - * </ul> | ||
26 | - * | ||
27 | - * @author SERPRO | ||
28 | - * @see Controller | ||
29 | - */ | ||
30 | -@Controller | ||
31 | -@Stereotype | ||
32 | -@Inherited | ||
33 | -@Target(TYPE) | ||
34 | -@Retention(RUNTIME) | ||
35 | -public @interface RestController { | ||
36 | -} |
demoiselle-parent/pom.xml
1 | <?xml version="1.0" encoding="UTF-8"?> | 1 | <?xml version="1.0" encoding="UTF-8"?> |
2 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | 2 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
3 | - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
4 | - | ||
5 | - <artifactId>demoiselle-parent</artifactId> | ||
6 | - <packaging>pom</packaging> | ||
7 | - <modelVersion>4.0.0</modelVersion> | ||
8 | - | ||
9 | - <name>Demoiselle Parent POM</name> | ||
10 | - | ||
11 | - <parent> | ||
12 | - <groupId>org.demoiselle.jee</groupId> | ||
13 | - <artifactId>demoiselle-build</artifactId> | ||
14 | - <version>3.0.0-BETA1-SNAPSHOT</version> | ||
15 | - </parent> | ||
16 | - | ||
17 | - <properties> | ||
18 | - <!-- General --> | ||
19 | - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||
20 | - | ||
21 | - <!-- Dependencies versions --> | ||
22 | - <javaee.version>7.0</javaee.version> | ||
23 | - <cdi.version>1.2</cdi.version> | ||
24 | - <validation.version>1.1.0.Final</validation.version> | ||
25 | - <transaction.version>1.2</transaction.version> | ||
26 | - <jstl.version>1.2</jstl.version> | ||
27 | - <el.version>3.0.0</el.version> | ||
28 | - <servlet.version>3.1.0</servlet.version> | ||
29 | - <persistence.version>1.0.2</persistence.version> | ||
30 | - <rest.version>2.0</rest.version> | ||
31 | - <concurrent.version>1.0</concurrent.version> | ||
32 | - <hibernate.version>5.1.0.Final</hibernate.version> | ||
33 | - <hibernate.validator.version>5.2.4.Final</hibernate.validator.version> | ||
34 | - <commons.configuration.version>2.0</commons.configuration.version> | ||
35 | - <jaxrs.version>2.0.1</jaxrs.version> | ||
36 | - <javaee.version>7.0</javaee.version> | ||
37 | - <deltaspike.version>1.7.1</deltaspike.version> | ||
38 | - <ejb.version>3.2</ejb.version> | ||
39 | - <cache.version>1.0.0</cache.version> | ||
40 | - | ||
41 | - <!-- Maven plugin versions --> | ||
42 | - <maven.compiler.plugin.version>3.5.1</maven.compiler.plugin.version> | ||
43 | - <maven.war.plugin.version>2.6</maven.war.plugin.version> | ||
44 | - <maven.compiler.source>1.8</maven.compiler.source> | ||
45 | - <maven.compiler.target>1.8</maven.compiler.target> | ||
46 | - | ||
47 | - </properties> | ||
48 | - | ||
49 | - <dependencyManagement> | ||
50 | - | ||
51 | - <dependencies> | ||
52 | - | ||
53 | - <!-- jsr-299 api --> | ||
54 | - <dependency> | ||
55 | - <groupId>javax.enterprise</groupId> | ||
56 | - <artifactId>cdi-api</artifactId> | ||
57 | - <scope>provided</scope> | ||
58 | - <version>${cdi.version}</version> | ||
59 | - </dependency> | ||
60 | - | ||
61 | - <!-- jsr-349 api --> | ||
62 | - <dependency> | ||
63 | - <artifactId>validation-api</artifactId> | ||
64 | - <groupId>javax.validation</groupId> | ||
65 | - <scope>provided</scope> | ||
66 | - <version>${validation.version}</version> | ||
67 | - </dependency> | ||
68 | - | ||
69 | - <!-- jsr-341 api and impl --> | ||
70 | - <dependency> | ||
71 | - <groupId>org.glassfish</groupId> | ||
72 | - <artifactId>javax.el</artifactId> | ||
73 | - <scope>provided</scope> | ||
74 | - <version>${el.version}</version> | ||
75 | - </dependency> | ||
76 | - | ||
77 | - <!-- jsr-342 api --> | ||
78 | - <dependency> | ||
79 | - <groupId>javax</groupId> | ||
80 | - <artifactId>javaee-api</artifactId> | ||
81 | - <scope>provided</scope> | ||
82 | - <version>${javaee.version}</version> | ||
83 | - </dependency> | ||
84 | - | ||
85 | - <!-- jsr-340 api --> | ||
86 | - <dependency> | ||
87 | - <groupId>javax.servlet</groupId> | ||
88 | - <artifactId>javax.servlet-api</artifactId> | ||
89 | - <scope>provided</scope> | ||
90 | - <version>${servlet.version}</version> | ||
91 | - </dependency> | ||
92 | - <dependency> | ||
93 | - <groupId>javax.servlet</groupId> | ||
94 | - <artifactId>jstl</artifactId> | ||
95 | - <scope>provided</scope> | ||
96 | - <version>${jstl.version}</version> | ||
97 | - </dependency> | ||
98 | - | ||
99 | - <!-- jsr-338 api --> | ||
100 | - <dependency> | ||
101 | - <groupId>org.hibernate</groupId> | ||
102 | - <artifactId>hibernate-entitymanager</artifactId> | ||
103 | - <scope>provided</scope> | ||
104 | - <version>${hibernate.version}</version> | ||
105 | - </dependency> | ||
106 | - | ||
107 | - <!-- jsr-339 api --> | ||
108 | - <dependency> | ||
109 | - <groupId>javax.ws.rs</groupId> | ||
110 | - <artifactId>javax.ws.rs-api</artifactId> | ||
111 | - <scope>provided</scope> | ||
112 | - <version>${jaxrs.version}</version> | ||
113 | - </dependency> | ||
114 | - | ||
115 | - <!-- jsr-342 api --> | ||
116 | - <dependency> | ||
117 | - <groupId>javax</groupId> | ||
118 | - <artifactId>javaee-web-api</artifactId> | ||
119 | - <version>${javaee.version}</version> | ||
120 | - </dependency> | ||
121 | - | ||
122 | - <!-- jsr-318 api --> | ||
123 | - <dependency> | ||
124 | - <groupId>javax.ejb</groupId> | ||
125 | - <artifactId>javax.ejb-api</artifactId> | ||
126 | - <version>${ejb.version}</version> | ||
127 | - <scope>provided</scope> | ||
128 | - </dependency> | ||
129 | - | ||
130 | - <!-- jsr-107 api --> | ||
131 | - <dependency> | ||
132 | - <groupId>javax.cache</groupId> | ||
133 | - <artifactId>cache-api</artifactId> | ||
134 | - <version>${cache.version}</version> | ||
135 | - </dependency> | ||
136 | - | ||
137 | - <!-- jsr-107 api --> | ||
138 | - <dependency> | ||
139 | - <groupId>javax.persistence</groupId> | ||
140 | - <artifactId>persistence-api</artifactId> | ||
141 | - <version>${persistence.version}</version> | ||
142 | - </dependency> | ||
143 | - | ||
144 | - <dependency> | ||
145 | - <groupId>javax.transaction</groupId> | ||
146 | - <artifactId>javax.transaction-api</artifactId> | ||
147 | - <version>${transaction.version}</version> | ||
148 | - </dependency> | ||
149 | - | ||
150 | - <dependency> | ||
151 | - <groupId>javax.json</groupId> | ||
152 | - <artifactId>javax.json-api</artifactId> | ||
153 | - <version>1.0</version> | ||
154 | - </dependency> | ||
155 | - | ||
156 | - <!-- configuration e messages --> | ||
157 | - <dependency> | ||
158 | - <groupId>org.apache.deltaspike.core</groupId> | ||
159 | - <artifactId>deltaspike-core-api</artifactId> | ||
160 | - <scope>compile</scope> | ||
161 | - <version>${deltaspike.version}</version> | ||
162 | - </dependency> | ||
163 | - <dependency> | ||
164 | - <groupId>org.apache.deltaspike.core</groupId> | ||
165 | - <artifactId>deltaspike-core-impl</artifactId> | ||
166 | - <scope>runtime</scope> | ||
167 | - <version>${deltaspike.version}</version> | ||
168 | - </dependency> | ||
169 | - | ||
170 | - <!-- demoiselle --> | ||
171 | - <dependency> | ||
172 | - <groupId>org.demoiselle.jee</groupId> | ||
173 | - <artifactId>demoiselle-core</artifactId> | ||
174 | - <version>${project.version}</version> | ||
175 | - </dependency> | ||
176 | - | ||
177 | - </dependencies> | ||
178 | - | ||
179 | - </dependencyManagement> | 3 | + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
4 | + | ||
5 | + <artifactId>demoiselle-parent</artifactId> | ||
6 | + <packaging>pom</packaging> | ||
7 | + <modelVersion>4.0.0</modelVersion> | ||
8 | + | ||
9 | + <name>Demoiselle Parent POM</name> | ||
10 | + | ||
11 | + <parent> | ||
12 | + <groupId>org.demoiselle.jee</groupId> | ||
13 | + <artifactId>demoiselle-build</artifactId> | ||
14 | + <version>3.0.0-BETA1-SNAPSHOT</version> | ||
15 | + </parent> | ||
16 | + | ||
17 | + <properties> | ||
18 | + <!-- General --> | ||
19 | + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||
20 | + | ||
21 | + <!-- Dependencies versions --> | ||
22 | + <javaee.version>7.0</javaee.version> | ||
23 | + <cdi.version>1.2</cdi.version> | ||
24 | + <validation.version>1.1.0.Final</validation.version> | ||
25 | + <transaction.version>1.2</transaction.version> | ||
26 | + <jstl.version>1.2</jstl.version> | ||
27 | + <el.version>3.0.0</el.version> | ||
28 | + <servlet.version>3.1.0</servlet.version> | ||
29 | + <persistence.version>1.0.2</persistence.version> | ||
30 | + <rest.version>2.0</rest.version> | ||
31 | + <concurrent.version>1.0</concurrent.version> | ||
32 | + <hibernate.version>5.1.0.Final</hibernate.version> | ||
33 | + <hibernate.validator.version>5.2.4.Final</hibernate.validator.version> | ||
34 | + <commons.configuration.version>2.0</commons.configuration.version> | ||
35 | + <jaxrs.version>2.0.1</jaxrs.version> | ||
36 | + <javaee.version>7.0</javaee.version> | ||
37 | + <deltaspike.version>1.7.1</deltaspike.version> | ||
38 | + <ejb.version>3.2</ejb.version> | ||
39 | + <cache.version>1.0.0</cache.version> | ||
40 | + | ||
41 | + <!-- Maven plugin versions --> | ||
42 | + <maven.compiler.plugin.version>3.5.1</maven.compiler.plugin.version> | ||
43 | + <maven.war.plugin.version>2.6</maven.war.plugin.version> | ||
44 | + <maven.compiler.source>1.8</maven.compiler.source> | ||
45 | + <maven.compiler.target>1.8</maven.compiler.target> | ||
46 | + | ||
47 | + </properties> | ||
48 | + | ||
49 | + <dependencyManagement> | ||
50 | + | ||
51 | + <dependencies> | ||
52 | + | ||
53 | + <!-- jsr-299 api --> | ||
54 | + <dependency> | ||
55 | + <groupId>javax.enterprise</groupId> | ||
56 | + <artifactId>cdi-api</artifactId> | ||
57 | + <scope>provided</scope> | ||
58 | + <version>${cdi.version}</version> | ||
59 | + </dependency> | ||
60 | + | ||
61 | + <!-- jsr-349 api --> | ||
62 | + <dependency> | ||
63 | + <artifactId>validation-api</artifactId> | ||
64 | + <groupId>javax.validation</groupId> | ||
65 | + <scope>provided</scope> | ||
66 | + <version>${validation.version}</version> | ||
67 | + </dependency> | ||
68 | + | ||
69 | + <!-- jsr-341 api and impl --> | ||
70 | + <dependency> | ||
71 | + <groupId>org.glassfish</groupId> | ||
72 | + <artifactId>javax.el</artifactId> | ||
73 | + <scope>provided</scope> | ||
74 | + <version>${el.version}</version> | ||
75 | + </dependency> | ||
76 | + | ||
77 | + <!-- jsr-342 api --> | ||
78 | + <dependency> | ||
79 | + <groupId>javax</groupId> | ||
80 | + <artifactId>javaee-api</artifactId> | ||
81 | + <scope>provided</scope> | ||
82 | + <version>${javaee.version}</version> | ||
83 | + </dependency> | ||
84 | + | ||
85 | + <!-- jsr-340 api --> | ||
86 | + <dependency> | ||
87 | + <groupId>javax.servlet</groupId> | ||
88 | + <artifactId>javax.servlet-api</artifactId> | ||
89 | + <scope>provided</scope> | ||
90 | + <version>${servlet.version}</version> | ||
91 | + </dependency> | ||
92 | + <dependency> | ||
93 | + <groupId>javax.servlet</groupId> | ||
94 | + <artifactId>jstl</artifactId> | ||
95 | + <scope>provided</scope> | ||
96 | + <version>${jstl.version}</version> | ||
97 | + </dependency> | ||
98 | + | ||
99 | + <!-- jsr-338 api --> | ||
100 | + <dependency> | ||
101 | + <groupId>org.hibernate</groupId> | ||
102 | + <artifactId>hibernate-entitymanager</artifactId> | ||
103 | + <scope>provided</scope> | ||
104 | + <version>${hibernate.version}</version> | ||
105 | + </dependency> | ||
106 | + | ||
107 | + <!-- jsr-339 api --> | ||
108 | + <dependency> | ||
109 | + <groupId>javax.ws.rs</groupId> | ||
110 | + <artifactId>javax.ws.rs-api</artifactId> | ||
111 | + <scope>provided</scope> | ||
112 | + <version>${jaxrs.version}</version> | ||
113 | + </dependency> | ||
114 | + | ||
115 | + <!-- jsr-342 api --> | ||
116 | + <dependency> | ||
117 | + <groupId>javax</groupId> | ||
118 | + <artifactId>javaee-web-api</artifactId> | ||
119 | + <version>${javaee.version}</version> | ||
120 | + </dependency> | ||
121 | + | ||
122 | + <!-- jsr-318 api --> | ||
123 | + <dependency> | ||
124 | + <groupId>javax.ejb</groupId> | ||
125 | + <artifactId>javax.ejb-api</artifactId> | ||
126 | + <version>${ejb.version}</version> | ||
127 | + <scope>provided</scope> | ||
128 | + </dependency> | ||
129 | + | ||
130 | + <!-- jsr-107 api --> | ||
131 | + <dependency> | ||
132 | + <groupId>javax.cache</groupId> | ||
133 | + <artifactId>cache-api</artifactId> | ||
134 | + <version>${cache.version}</version> | ||
135 | + </dependency> | ||
136 | + | ||
137 | + <!-- jsr-107 api --> | ||
138 | + <dependency> | ||
139 | + <groupId>javax.persistence</groupId> | ||
140 | + <artifactId>persistence-api</artifactId> | ||
141 | + <version>${persistence.version}</version> | ||
142 | + </dependency> | ||
143 | + | ||
144 | + <dependency> | ||
145 | + <groupId>javax.transaction</groupId> | ||
146 | + <artifactId>javax.transaction-api</artifactId> | ||
147 | + <version>${transaction.version}</version> | ||
148 | + </dependency> | ||
149 | + | ||
150 | + <dependency> | ||
151 | + <groupId>javax.json</groupId> | ||
152 | + <artifactId>javax.json-api</artifactId> | ||
153 | + <version>1.0</version> | ||
154 | + </dependency> | ||
155 | + | ||
156 | + <!-- configuration e messages --> | ||
157 | + <dependency> | ||
158 | + <groupId>org.apache.deltaspike.core</groupId> | ||
159 | + <artifactId>deltaspike-core-api</artifactId> | ||
160 | + <scope>compile</scope> | ||
161 | + <version>${deltaspike.version}</version> | ||
162 | + </dependency> | ||
163 | + <dependency> | ||
164 | + <groupId>org.apache.deltaspike.core</groupId> | ||
165 | + <artifactId>deltaspike-core-impl</artifactId> | ||
166 | + <scope>runtime</scope> | ||
167 | + <version>${deltaspike.version}</version> | ||
168 | + </dependency> | ||
169 | + | ||
170 | + <!-- demoiselle --> | ||
171 | + <dependency> | ||
172 | + <groupId>org.demoiselle.jee</groupId> | ||
173 | + <artifactId>demoiselle-core</artifactId> | ||
174 | + <version>${project.version}</version> | ||
175 | + </dependency> | ||
176 | + | ||
177 | + <dependency> | ||
178 | + <groupId>org.demoiselle.jee</groupId> | ||
179 | + <artifactId>demoiselle-security</artifactId> | ||
180 | + <version>${project.version}</version> | ||
181 | + </dependency> | ||
182 | + | ||
183 | + </dependencies> | ||
184 | + | ||
185 | + </dependencyManagement> | ||
180 | 186 | ||
181 | </project> | 187 | </project> |
@@ -0,0 +1,37 @@ | @@ -0,0 +1,37 @@ | ||
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
3 | + <modelVersion>4.0.0</modelVersion> | ||
4 | + <artifactId>demoiselle-rest</artifactId> | ||
5 | + <packaging>jar</packaging> | ||
6 | + | ||
7 | + <name>Demoiselle Rest</name> | ||
8 | + <description> | ||
9 | + Demoiselle Rest | ||
10 | + </description> | ||
11 | + | ||
12 | + <parent> | ||
13 | + <groupId>org.demoiselle.jee</groupId> | ||
14 | + <artifactId>demoiselle-parent</artifactId> | ||
15 | + <version>3.0.0-BETA1-SNAPSHOT</version> | ||
16 | + <relativePath>../demoiselle-parent</relativePath> | ||
17 | + </parent> | ||
18 | + | ||
19 | + <dependencies> | ||
20 | + | ||
21 | + <dependency> | ||
22 | + <groupId>org.demoiselle.jee</groupId> | ||
23 | + <artifactId>demoiselle-core</artifactId> | ||
24 | + </dependency> | ||
25 | + | ||
26 | + <dependency> | ||
27 | + <groupId>javax.ws.rs</groupId> | ||
28 | + <artifactId>javax.ws.rs-api</artifactId> | ||
29 | + </dependency> | ||
30 | + | ||
31 | + <dependency> | ||
32 | + <groupId>javax.json</groupId> | ||
33 | + <artifactId>javax.json-api</artifactId> | ||
34 | + </dependency> | ||
35 | + | ||
36 | + </dependencies> | ||
37 | +</project> |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/JaxRsFilter.java
0 → 100644
@@ -0,0 +1,59 @@ | @@ -0,0 +1,59 @@ | ||
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; | ||
8 | + | ||
9 | +import java.util.logging.Logger; | ||
10 | +import javax.annotation.PostConstruct; | ||
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; | ||
17 | +import javax.ws.rs.container.ContainerRequestFilter; | ||
18 | +import javax.ws.rs.container.ContainerResponseContext; | ||
19 | +import javax.ws.rs.container.ContainerResponseFilter; | ||
20 | +import javax.ws.rs.container.PreMatching; | ||
21 | +import javax.ws.rs.ext.Provider; | ||
22 | + | ||
23 | +/** | ||
24 | + * | ||
25 | + * @author 70744416353 | ||
26 | + */ | ||
27 | +@Provider | ||
28 | +@PreMatching | ||
29 | +public class JaxRsFilter implements ClientRequestFilter, ClientResponseFilter, ContainerRequestFilter, ContainerResponseFilter { | ||
30 | + | ||
31 | + @Inject | ||
32 | + private Logger LOG; | ||
33 | + | ||
34 | + @Override | ||
35 | + public void filter(ClientRequestContext requestContext) { | ||
36 | + } | ||
37 | + | ||
38 | + @Override | ||
39 | + public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) { | ||
40 | + } | ||
41 | + | ||
42 | + @Override | ||
43 | + public void filter(ContainerRequestContext requestContext) { | ||
44 | + } | ||
45 | + | ||
46 | + @Override | ||
47 | + public void filter(ContainerRequestContext requestContext, ContainerResponseContext response) { | ||
48 | + response.getHeaders().putSingle("Demoiselle", "3.0.0"); | ||
49 | + response.getHeaders().putSingle("Access-Control-Allow-Origin", "*"); | ||
50 | + response.getHeaders().putSingle("Access-Control-Allow-Methods", "OPTIONS, GET, POST, PUT, DELETE"); | ||
51 | + response.getHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type"); | ||
52 | + } | ||
53 | + | ||
54 | + @PostConstruct | ||
55 | + public void init() { | ||
56 | + LOG.info("Demoiselle Module - Rest"); | ||
57 | + } | ||
58 | + | ||
59 | +} |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/crud/package-info.java
0 → 100644
@@ -0,0 +1,11 @@ | @@ -0,0 +1,11 @@ | ||
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 | +/** | ||
8 | + * Esta pacote tem o objetivo de conter as classes relacionadas aos | ||
9 | + * facilitadores de CRUD do framework Demoiselle. | ||
10 | + */ | ||
11 | +package org.demoiselle.jee.ws.jaxrs.crud; | ||
0 | \ No newline at end of file | 12 | \ No newline at end of file |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/exception/DemoiselleRESTException.java
0 → 100644
@@ -0,0 +1,41 @@ | @@ -0,0 +1,41 @@ | ||
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.exception; | ||
8 | + | ||
9 | +import java.util.HashMap; | ||
10 | + | ||
11 | +import org.demoiselle.jee.core.exception.DemoiselleException; | ||
12 | + | ||
13 | +public class DemoiselleRESTException extends DemoiselleException { | ||
14 | + | ||
15 | + private static final long serialVersionUID = 519965615171844237L; | ||
16 | + | ||
17 | + private HashMap<String, String> messages = new HashMap<String, String>(); | ||
18 | + | ||
19 | + private int statusCode; | ||
20 | + | ||
21 | + public DemoiselleRESTException() { | ||
22 | + | ||
23 | + } | ||
24 | + | ||
25 | + public DemoiselleRESTException(String string) { | ||
26 | + super(string); | ||
27 | + } | ||
28 | + | ||
29 | + public int getStatusCode() { | ||
30 | + return statusCode; | ||
31 | + } | ||
32 | + | ||
33 | + public void addMessage(String field, String msg) { | ||
34 | + this.statusCode = 422; | ||
35 | + messages.put(field, msg); | ||
36 | + } | ||
37 | + | ||
38 | + public HashMap<String, String> getMessages() { | ||
39 | + return messages; | ||
40 | + } | ||
41 | +} |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/exception/mapper/GenericExceptionMapper.java
0 → 100644
@@ -0,0 +1,68 @@ | @@ -0,0 +1,68 @@ | ||
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.exception.mapper; | ||
8 | + | ||
9 | +import java.io.PrintWriter; | ||
10 | +import java.io.StringWriter; | ||
11 | +import java.util.HashMap; | ||
12 | + | ||
13 | +import javax.ws.rs.WebApplicationException; | ||
14 | +import javax.ws.rs.core.MediaType; | ||
15 | +import javax.ws.rs.core.Response; | ||
16 | +import javax.ws.rs.ext.ExceptionMapper; | ||
17 | +import javax.ws.rs.ext.Provider; | ||
18 | + | ||
19 | +import org.demoiselle.jee.ws.jaxrs.exception.DemoiselleRESTException; | ||
20 | + | ||
21 | +@Provider | ||
22 | +public class GenericExceptionMapper implements ExceptionMapper<Exception> { | ||
23 | + | ||
24 | + public Response toResponse(Exception ex) { | ||
25 | + | ||
26 | + StringWriter errorStackTrace = new StringWriter(); | ||
27 | + ex.printStackTrace(new PrintWriter(errorStackTrace)); | ||
28 | + | ||
29 | + // Verifica se a exception é de validação de PAYLOAD do REST | ||
30 | + if (ex.getCause() instanceof DemoiselleRESTException) { | ||
31 | + DemoiselleRESTException exDemoiselleREST = (DemoiselleRESTException) ex.getCause(); | ||
32 | + if (!exDemoiselleREST.getMessages().isEmpty()) { | ||
33 | + return Response.status(exDemoiselleREST.getStatusCode()).entity(exDemoiselleREST.getMessages()) | ||
34 | + .type(MediaType.APPLICATION_JSON).build(); | ||
35 | + } | ||
36 | + } | ||
37 | + | ||
38 | + HashMap<String, String> entity = new HashMap<String, String>(); | ||
39 | + | ||
40 | + // No caso de existir message ele mostra a MESSAGE da Exception | ||
41 | + if (ex.getMessage() != null) { | ||
42 | + entity.put("error", ex.getMessage()); | ||
43 | + | ||
44 | + // Pega toda as mensagens da stacktrace | ||
45 | + int level = 1; | ||
46 | + while (ex.getCause() != null) { | ||
47 | + ex = (Exception) ex.getCause(); | ||
48 | + if (!ex.getMessage().isEmpty()) { | ||
49 | + entity.put("inner_cause_" + level, ex.getMessage()); | ||
50 | + } | ||
51 | + level += 1; | ||
52 | + } | ||
53 | + | ||
54 | + // Por padrão retorna SERVER ERROR, mas tenta encontrar o status do RESPONSE se for WebApplicationException | ||
55 | + // http://docs.oracle.com/javaee/7/api/javax/ws/rs/WebApplicationException.html | ||
56 | + int responseCode = Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(); | ||
57 | + if (ex instanceof WebApplicationException) { | ||
58 | + responseCode = ((WebApplicationException)ex).getResponse().getStatus(); | ||
59 | + } | ||
60 | + | ||
61 | + return Response.status(responseCode).entity(entity).type(MediaType.APPLICATION_JSON).build(); | ||
62 | + } | ||
63 | + | ||
64 | + entity.put("error", "Erro interno desconhecido no servidor."); | ||
65 | + return Response.status(500).entity(entity).type(MediaType.APPLICATION_JSON).build(); | ||
66 | + } | ||
67 | + | ||
68 | +} |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/interceptor/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.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 | +} | ||
0 | \ No newline at end of file | 26 | \ No newline at end of file |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/interceptor/ValidatePayloadInterceptor.java
0 → 100644
@@ -0,0 +1,62 @@ | @@ -0,0 +1,62 @@ | ||
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 java.io.Serializable; | ||
10 | +import java.util.HashSet; | ||
11 | +import java.util.Set; | ||
12 | + | ||
13 | +import javax.interceptor.AroundInvoke; | ||
14 | +import javax.interceptor.Interceptor; | ||
15 | +import javax.interceptor.InvocationContext; | ||
16 | +import javax.validation.ConstraintViolation; | ||
17 | +import javax.validation.UnexpectedTypeException; | ||
18 | +import javax.validation.Validation; | ||
19 | +import javax.validation.Validator; | ||
20 | +import javax.validation.ValidatorFactory; | ||
21 | + | ||
22 | +import org.demoiselle.jee.ws.jaxrs.exception.DemoiselleRESTException; | ||
23 | + | ||
24 | +@Interceptor | ||
25 | +@ValidatePayload | ||
26 | +public class ValidatePayloadInterceptor implements Serializable { | ||
27 | + | ||
28 | + private static final long serialVersionUID = 1L; | ||
29 | + | ||
30 | + @AroundInvoke | ||
31 | + public Object manage(final InvocationContext ic) throws Exception { | ||
32 | + DemoiselleRESTException ex = new DemoiselleRESTException(); | ||
33 | + Set<ConstraintViolation<?>> violations = new HashSet<ConstraintViolation<?>>(); | ||
34 | + for (Object params : ic.getParameters()) { | ||
35 | + if (params != null) { | ||
36 | + ValidatorFactory dfv = Validation.buildDefaultValidatorFactory(); | ||
37 | + Validator validator = dfv.getValidator(); | ||
38 | + try { | ||
39 | + violations.addAll(validator.validate(params)); | ||
40 | + for (ConstraintViolation<?> violation : violations) { | ||
41 | + String field = (violation.getRootBeanClass().getSimpleName() + "_" | ||
42 | + + violation.getPropertyPath()).toLowerCase(); | ||
43 | + // GPMessage msg = | ||
44 | + // GPMessage.INVALID_FIELD_P1.setSufix(violation.getConstraintDescriptor() | ||
45 | + // .getAnnotation().annotationType().getSimpleName().toLowerCase()); | ||
46 | + | ||
47 | + ex.addMessage(field, violation.getMessage()); | ||
48 | + } | ||
49 | + } catch (UnexpectedTypeException cause) { | ||
50 | + // GPMessage msg = GPMessage.GENERAL_ERROR_P1; | ||
51 | + // msg.setParam(cause.getMessage()); | ||
52 | + throw new DemoiselleRESTException("ERRO GENERICO -> ALTERAR"); | ||
53 | + } | ||
54 | + } | ||
55 | + } | ||
56 | + | ||
57 | + if (!violations.isEmpty() && !ex.getMessages().isEmpty()) { | ||
58 | + throw ex; | ||
59 | + } | ||
60 | + return ic.proceed(); | ||
61 | + } | ||
62 | +} | ||
0 | \ No newline at end of file | 63 | \ No newline at end of file |
demoiselle-security-basic/pom.xml
1 | <?xml version="1.0" encoding="UTF-8"?> | 1 | <?xml version="1.0" encoding="UTF-8"?> |
2 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | 2 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
3 | <modelVersion>4.0.0</modelVersion> | 3 | <modelVersion>4.0.0</modelVersion> |
4 | - <groupId>org.demoiselle.jee</groupId> | ||
5 | <artifactId>demoiselle-security-basic</artifactId> | 4 | <artifactId>demoiselle-security-basic</artifactId> |
6 | - <version>3.0.0-SNAPSHOT</version> | ||
7 | <packaging>jar</packaging> | 5 | <packaging>jar</packaging> |
8 | - <properties> | ||
9 | - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||
10 | - <maven.compiler.source>1.8</maven.compiler.source> | ||
11 | - <maven.compiler.target>1.8</maven.compiler.target> | ||
12 | - </properties> | 6 | + |
7 | + <name>Demoiselle Security Basic</name> | ||
8 | + <description> | ||
9 | + Demoiselle Security Basic | ||
10 | + </description> | ||
11 | + | ||
12 | + <parent> | ||
13 | + <groupId>org.demoiselle.jee</groupId> | ||
14 | + <artifactId>demoiselle-parent</artifactId> | ||
15 | + <version>3.0.0-BETA1-SNAPSHOT</version> | ||
16 | + <relativePath>../demoiselle-parent</relativePath> | ||
17 | + </parent> | ||
18 | + | ||
13 | <dependencies> | 19 | <dependencies> |
14 | 20 | ||
15 | <dependency> | 21 | <dependency> |
16 | - <groupId>${project.groupId}</groupId> | ||
17 | - <artifactId>demoiselle-core</artifactId> | ||
18 | - <version>${project.version}</version> | ||
19 | - </dependency> | ||
20 | - | ||
21 | - <dependency> | ||
22 | - <groupId>${project.groupId}</groupId> | ||
23 | - <artifactId>demoiselle-ws-jaxrs</artifactId> | ||
24 | - <version>${project.version}</version> | ||
25 | - </dependency> | ||
26 | - | ||
27 | - <dependency> | ||
28 | - <groupId>${project.groupId}</groupId> | 22 | + <groupId>org.demoiselle.jee</groupId> |
29 | <artifactId>demoiselle-security</artifactId> | 23 | <artifactId>demoiselle-security</artifactId> |
30 | - <version>${project.version}</version> | ||
31 | </dependency> | 24 | </dependency> |
32 | 25 | ||
33 | </dependencies> | 26 | </dependencies> |
demoiselle-security-basic/src/main/java/org/demoiselle/jee/security/basic/impl/TokensManagerImpl.java
@@ -6,14 +6,17 @@ | @@ -6,14 +6,17 @@ | ||
6 | package org.demoiselle.jee.security.basic.impl; | 6 | package org.demoiselle.jee.security.basic.impl; |
7 | 7 | ||
8 | import java.security.Principal; | 8 | import java.security.Principal; |
9 | +import java.util.List; | ||
9 | import java.util.Map; | 10 | import java.util.Map; |
10 | import java.util.UUID; | 11 | import java.util.UUID; |
11 | import java.util.concurrent.ConcurrentHashMap; | 12 | import java.util.concurrent.ConcurrentHashMap; |
12 | import java.util.logging.Logger; | 13 | import java.util.logging.Logger; |
13 | import javax.enterprise.context.Dependent; | 14 | import javax.enterprise.context.Dependent; |
15 | +import javax.enterprise.context.RequestScoped; | ||
14 | import javax.inject.Inject; | 16 | import javax.inject.Inject; |
15 | -import org.demoiselle.jee.security.Token; | ||
16 | -import org.demoiselle.jee.security.interfaces.TokensManager; | 17 | +import org.demoiselle.jee.core.interfaces.security.DemoisellePrincipal; |
18 | +import org.demoiselle.jee.core.interfaces.security.Token; | ||
19 | +import org.demoiselle.jee.core.interfaces.security.TokensManager; | ||
17 | 20 | ||
18 | /** | 21 | /** |
19 | * | 22 | * |
@@ -27,25 +30,41 @@ public class TokensManagerImpl implements TokensManager { | @@ -27,25 +30,41 @@ public class TokensManagerImpl implements TokensManager { | ||
27 | @Inject | 30 | @Inject |
28 | private Logger logger; | 31 | private Logger logger; |
29 | 32 | ||
33 | + @Inject | ||
34 | + @RequestScoped | ||
35 | + private Token token; | ||
36 | + | ||
37 | + @Inject | ||
38 | + @RequestScoped | ||
39 | + private Principal loggedUser; | ||
40 | + | ||
30 | @Override | 41 | @Override |
31 | - public Principal getUser(Token token) { | ||
32 | - return repo.get(token.getKey()); | 42 | + public Principal getUser() { |
43 | + if (loggedUser == null) { | ||
44 | + if (token.getKey() != null && !token.getKey().isEmpty()) { | ||
45 | + loggedUser = repo.get(token.getKey()); | ||
46 | + return loggedUser; | ||
47 | + } | ||
48 | + } | ||
49 | + return loggedUser; | ||
33 | } | 50 | } |
34 | 51 | ||
35 | @Override | 52 | @Override |
36 | - public Token getToken(Principal user) { | 53 | + public void setUser(Principal user) { |
37 | String value = null; | 54 | String value = null; |
38 | if (!repo.containsValue(user)) { | 55 | if (!repo.containsValue(user)) { |
39 | value = UUID.randomUUID().toString(); | 56 | value = UUID.randomUUID().toString(); |
40 | repo.put(value, user); | 57 | repo.put(value, user); |
41 | - } else { | ||
42 | - for (Map.Entry<String, Principal> entry : repo.entrySet()) { | ||
43 | - if (entry.getValue().equals(user)) { | ||
44 | - return entry.getKey(); | ||
45 | - } | ||
46 | - } | 58 | + token.setKey(value); |
59 | + token.setType("Basic"); | ||
47 | } | 60 | } |
48 | - return value; | ||
49 | } | 61 | } |
50 | 62 | ||
63 | + @Override | ||
64 | + public boolean validate() { | ||
65 | + return true;//(getUser() != null && repo.get(token.getKey()).); | ||
66 | + } | ||
67 | + | ||
68 | + | ||
69 | + | ||
51 | } | 70 | } |
demoiselle-security-jwt/pom.xml
1 | <?xml version="1.0" encoding="UTF-8"?> | 1 | <?xml version="1.0" encoding="UTF-8"?> |
2 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | 2 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
3 | <modelVersion>4.0.0</modelVersion> | 3 | <modelVersion>4.0.0</modelVersion> |
4 | - <groupId>org.demoiselle.jee</groupId> | ||
5 | <artifactId>demoiselle-security-jwt</artifactId> | 4 | <artifactId>demoiselle-security-jwt</artifactId> |
6 | - <version>3.0.0-SNAPSHOT</version> | ||
7 | <packaging>jar</packaging> | 5 | <packaging>jar</packaging> |
8 | - <properties> | ||
9 | - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||
10 | - <maven.compiler.source>1.8</maven.compiler.source> | ||
11 | - <maven.compiler.target>1.8</maven.compiler.target> | ||
12 | - </properties> | 6 | + |
7 | + <name>Demoiselle Security JWT</name> | ||
8 | + <description> | ||
9 | + Demoiselle Security JWT | ||
10 | + </description> | ||
11 | + | ||
12 | + <parent> | ||
13 | + <groupId>org.demoiselle.jee</groupId> | ||
14 | + <artifactId>demoiselle-parent</artifactId> | ||
15 | + <version>3.0.0-BETA1-SNAPSHOT</version> | ||
16 | + <relativePath>../demoiselle-parent</relativePath> | ||
17 | + </parent> | ||
18 | + | ||
13 | <dependencies> | 19 | <dependencies> |
14 | 20 | ||
15 | <dependency> | 21 | <dependency> |
16 | - <groupId>${project.groupId}</groupId> | ||
17 | - <artifactId>demoiselle-core</artifactId> | ||
18 | - <version>${project.version}</version> | ||
19 | - </dependency> | ||
20 | - | ||
21 | - <dependency> | ||
22 | - <groupId>${project.groupId}</groupId> | 22 | + <groupId>org.demoiselle.jee</groupId> |
23 | <artifactId>demoiselle-security</artifactId> | 23 | <artifactId>demoiselle-security</artifactId> |
24 | - <version>${project.version}</version> | ||
25 | </dependency> | 24 | </dependency> |
26 | - | 25 | + |
27 | <dependency> | 26 | <dependency> |
28 | <groupId>org.bitbucket.b_c</groupId> | 27 | <groupId>org.bitbucket.b_c</groupId> |
29 | <artifactId>jose4j</artifactId> | 28 | <artifactId>jose4j</artifactId> |
@@ -36,6 +35,6 @@ | @@ -36,6 +35,6 @@ | ||
36 | <version>2.2.2</version> | 35 | <version>2.2.2</version> |
37 | <scope>compile</scope> | 36 | <scope>compile</scope> |
38 | </dependency> | 37 | </dependency> |
39 | - | 38 | + |
40 | </dependencies> | 39 | </dependencies> |
41 | </project> | 40 | </project> |
demoiselle-security-jwt/src/main/java/org/demoiselle/jee/security/jwt/impl/TokensManagerImpl.java
@@ -13,7 +13,8 @@ import java.util.logging.Logger; | @@ -13,7 +13,8 @@ import java.util.logging.Logger; | ||
13 | import javax.enterprise.context.Dependent; | 13 | import javax.enterprise.context.Dependent; |
14 | import javax.inject.Inject; | 14 | import javax.inject.Inject; |
15 | import javax.servlet.http.HttpServletRequest; | 15 | import javax.servlet.http.HttpServletRequest; |
16 | -import org.demoiselle.jee.security.interfaces.TokensManager; | 16 | +import org.demoiselle.jee.core.security.LoggedUser; |
17 | +import org.demoiselle.jee.core.security.TokensManager; | ||
17 | import org.jose4j.jwk.RsaJsonWebKey; | 18 | import org.jose4j.jwk.RsaJsonWebKey; |
18 | import org.jose4j.jwk.RsaJwkGenerator; | 19 | import org.jose4j.jwk.RsaJwkGenerator; |
19 | import org.jose4j.jws.AlgorithmIdentifiers; | 20 | import org.jose4j.jws.AlgorithmIdentifiers; |
@@ -49,8 +50,8 @@ public class TokensManagerImpl implements TokensManager { | @@ -49,8 +50,8 @@ public class TokensManagerImpl implements TokensManager { | ||
49 | } | 50 | } |
50 | 51 | ||
51 | @Override | 52 | @Override |
52 | - public Principal getUser(String jwt) { | ||
53 | - Principal usuario = null; | 53 | + public LoggedUser getUser(String jwt) { |
54 | + LoggedUser usuario = null; | ||
54 | if (jwt != null && !jwt.isEmpty()) { | 55 | if (jwt != null && !jwt.isEmpty()) { |
55 | JwtConsumer jwtConsumer = new JwtConsumerBuilder() | 56 | JwtConsumer jwtConsumer = new JwtConsumerBuilder() |
56 | .setRequireExpirationTime() // the JWT must have an expiration time | 57 | .setRequireExpirationTime() // the JWT must have an expiration time |
@@ -62,7 +63,7 @@ public class TokensManagerImpl implements TokensManager { | @@ -62,7 +63,7 @@ public class TokensManagerImpl implements TokensManager { | ||
62 | 63 | ||
63 | try { | 64 | try { |
64 | JwtClaims jwtClaims = jwtConsumer.processToClaims(jwt); | 65 | JwtClaims jwtClaims = jwtConsumer.processToClaims(jwt); |
65 | - usuario = new Gson().fromJson((String) jwtClaims.getClaimValue("user"), Principal.class); | 66 | + usuario = new Gson().fromJson((String) jwtClaims.getClaimValue("user"), LoggedUser.class); |
66 | 67 | ||
67 | String ip = httpRequest.getRemoteAddr(); | 68 | String ip = httpRequest.getRemoteAddr(); |
68 | if (!ip.equalsIgnoreCase((String) jwtClaims.getClaimValue("ip"))) { | 69 | if (!ip.equalsIgnoreCase((String) jwtClaims.getClaimValue("ip"))) { |
@@ -76,7 +77,7 @@ public class TokensManagerImpl implements TokensManager { | @@ -76,7 +77,7 @@ public class TokensManagerImpl implements TokensManager { | ||
76 | } | 77 | } |
77 | 78 | ||
78 | @Override | 79 | @Override |
79 | - public String getToken(Principal user) { | 80 | + public String setUser(LoggedUser user) { |
80 | try { | 81 | try { |
81 | JwtClaims claims = new JwtClaims(); | 82 | JwtClaims claims = new JwtClaims(); |
82 | claims.setIssuer("demoiselle"); | 83 | claims.setIssuer("demoiselle"); |
@@ -0,0 +1,27 @@ | @@ -0,0 +1,27 @@ | ||
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
3 | + <modelVersion>4.0.0</modelVersion> | ||
4 | + <artifactId>demoiselle-security-token</artifactId> | ||
5 | + <packaging>jar</packaging> | ||
6 | + | ||
7 | + <name>Demoiselle Security Token</name> | ||
8 | + <description> | ||
9 | + Demoiselle Security Token | ||
10 | + </description> | ||
11 | + | ||
12 | + <parent> | ||
13 | + <groupId>org.demoiselle.jee</groupId> | ||
14 | + <artifactId>demoiselle-parent</artifactId> | ||
15 | + <version>3.0.0-BETA1-SNAPSHOT</version> | ||
16 | + <relativePath>../demoiselle-parent</relativePath> | ||
17 | + </parent> | ||
18 | + | ||
19 | + <dependencies> | ||
20 | + | ||
21 | + <dependency> | ||
22 | + <groupId>org.demoiselle.jee</groupId> | ||
23 | + <artifactId>demoiselle-security</artifactId> | ||
24 | + </dependency> | ||
25 | + | ||
26 | + </dependencies> | ||
27 | +</project> |
demoiselle-security-token/src/main/java/org/demoiselle/jee/security/basic/impl/TokensManagerImpl.java
0 → 100644
@@ -0,0 +1,90 @@ | @@ -0,0 +1,90 @@ | ||
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.security.basic.impl; | ||
7 | + | ||
8 | +import java.security.Principal; | ||
9 | +import java.util.List; | ||
10 | +import java.util.Map; | ||
11 | +import java.util.UUID; | ||
12 | +import java.util.concurrent.ConcurrentHashMap; | ||
13 | +import java.util.logging.Logger; | ||
14 | +import javax.enterprise.context.Dependent; | ||
15 | +import javax.enterprise.context.RequestScoped; | ||
16 | +import javax.inject.Inject; | ||
17 | +import org.demoiselle.jee.core.interfaces.security.Token; | ||
18 | +import org.demoiselle.jee.core.interfaces.security.TokensManager; | ||
19 | + | ||
20 | +/** | ||
21 | + * | ||
22 | + * @author 70744416353 | ||
23 | + */ | ||
24 | +@Dependent | ||
25 | +public class TokensManagerImpl implements TokensManager { | ||
26 | + | ||
27 | + private static ConcurrentHashMap<String, Principal> repo = new ConcurrentHashMap<>(); | ||
28 | + | ||
29 | + @Inject | ||
30 | + private Logger logger; | ||
31 | + | ||
32 | + @Inject | ||
33 | + @RequestScoped | ||
34 | + private Token token; | ||
35 | + | ||
36 | + @Inject | ||
37 | + @RequestScoped | ||
38 | + private Principal loggedUser; | ||
39 | + | ||
40 | + @Override | ||
41 | + public Principal getUser() { | ||
42 | + if (loggedUser == null) { | ||
43 | + if (token.getKey() != null && !token.getKey().isEmpty()) { | ||
44 | + loggedUser = repo.get(token.getKey()); | ||
45 | + return loggedUser; | ||
46 | + } | ||
47 | + } | ||
48 | + return loggedUser; | ||
49 | + } | ||
50 | + | ||
51 | + @Override | ||
52 | + public void setUser(Principal user) { | ||
53 | + String value = null; | ||
54 | + if (!repo.containsValue(user)) { | ||
55 | + value = UUID.randomUUID().toString(); | ||
56 | + repo.put(value, user); | ||
57 | + token.setKey(value); | ||
58 | + token.setType("Basic"); | ||
59 | + } | ||
60 | + } | ||
61 | + | ||
62 | + @Override | ||
63 | + public boolean validate() { | ||
64 | + return true;//(getUser() != null && repo.get(token.getKey()).); | ||
65 | + } | ||
66 | + | ||
67 | + @Override | ||
68 | + public Token getToken() { | ||
69 | + return token; | ||
70 | + } | ||
71 | + | ||
72 | + @Override | ||
73 | + public void setToken(Token token) { | ||
74 | + String key = null; | ||
75 | + if (repo.containsKey(token.getKey())) { | ||
76 | + loggedUser = repo.get(key); | ||
77 | + } | ||
78 | + } | ||
79 | + | ||
80 | + @Override | ||
81 | + public void setRoles(List<String> roles) { | ||
82 | + | ||
83 | + } | ||
84 | + | ||
85 | + @Override | ||
86 | + public void setPermissions(Map<String, String> permissions) { | ||
87 | + | ||
88 | + } | ||
89 | + | ||
90 | +} |
demoiselle-security-token/src/main/resources/demoiselle.properties
0 → 100644
demoiselle-security-token/src/main/resources/messages.properties
0 → 100644
demoiselle-security/pom.xml
1 | <?xml version="1.0" encoding="UTF-8"?> | 1 | <?xml version="1.0" encoding="UTF-8"?> |
2 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | 2 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
3 | - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
4 | - <modelVersion>4.0.0</modelVersion> | ||
5 | - <artifactId>demoiselle-security</artifactId> | ||
6 | - <packaging>jar</packaging> | 3 | + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
4 | + <modelVersion>4.0.0</modelVersion> | ||
5 | + <artifactId>demoiselle-security</artifactId> | ||
6 | + <packaging>jar</packaging> | ||
7 | 7 | ||
8 | - <name>Demoiselle Security</name> | ||
9 | - <description> | ||
10 | - Demoiselle Security | ||
11 | - </description> | 8 | + <name>Demoiselle Security</name> |
9 | + <description> | ||
10 | + Demoiselle Security | ||
11 | + </description> | ||
12 | 12 | ||
13 | - <parent> | ||
14 | - <groupId>org.demoiselle.jee</groupId> | ||
15 | - <artifactId>demoiselle-parent</artifactId> | ||
16 | - <version>3.0.0-BETA1-SNAPSHOT</version> | ||
17 | - <relativePath>../demoiselle-parent</relativePath> | ||
18 | - </parent> | 13 | + <parent> |
14 | + <groupId>org.demoiselle.jee</groupId> | ||
15 | + <artifactId>demoiselle-parent</artifactId> | ||
16 | + <version>3.0.0-BETA1-SNAPSHOT</version> | ||
17 | + <relativePath>../demoiselle-parent</relativePath> | ||
18 | + </parent> | ||
19 | 19 | ||
20 | - <dependencies> | 20 | + <dependencies> |
21 | 21 | ||
22 | - <dependency> | ||
23 | - <groupId>org.demoiselle.jee</groupId> | ||
24 | - <artifactId>demoiselle-core</artifactId> | ||
25 | - </dependency> | 22 | + <dependency> |
23 | + <groupId>org.demoiselle.jee</groupId> | ||
24 | + <artifactId>demoiselle-core</artifactId> | ||
25 | + </dependency> | ||
26 | 26 | ||
27 | - </dependencies> | 27 | + </dependencies> |
28 | </project> | 28 | </project> |
demoiselle-security/src/main/java/org/demoiselle/jee/security/JaxRsFilter.java
@@ -1,76 +0,0 @@ | @@ -1,76 +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.security; | ||
8 | - | ||
9 | -import java.io.IOException; | ||
10 | -import org.demoiselle.jee.security.interfaces.SecurityContext; | ||
11 | -import java.util.logging.Logger; | ||
12 | -import javax.annotation.PostConstruct; | ||
13 | -import javax.inject.Inject; | ||
14 | -import javax.ws.rs.client.ClientRequestContext; | ||
15 | -import javax.ws.rs.client.ClientRequestFilter; | ||
16 | -import javax.ws.rs.client.ClientResponseContext; | ||
17 | -import javax.ws.rs.client.ClientResponseFilter; | ||
18 | -import javax.ws.rs.container.ContainerRequestContext; | ||
19 | -import javax.ws.rs.container.ContainerRequestFilter; | ||
20 | -import javax.ws.rs.container.ContainerResponseContext; | ||
21 | -import javax.ws.rs.container.ContainerResponseFilter; | ||
22 | -import javax.ws.rs.container.PreMatching; | ||
23 | -import javax.ws.rs.ext.Provider; | ||
24 | - | ||
25 | -/** | ||
26 | - * | ||
27 | - * @author 70744416353 | ||
28 | - */ | ||
29 | -@Provider | ||
30 | -@PreMatching | ||
31 | -public class JaxRsFilter implements ClientRequestFilter, ClientResponseFilter, ContainerRequestFilter, ContainerResponseFilter { | ||
32 | - | ||
33 | - @Inject | ||
34 | - private Logger LOG; | ||
35 | - | ||
36 | - @Inject | ||
37 | - private SecurityContext securityContext; | ||
38 | - | ||
39 | - @PostConstruct | ||
40 | - public void init() { | ||
41 | - LOG.info("Demoiselle Module - Security"); | ||
42 | - } | ||
43 | - | ||
44 | - @Override | ||
45 | - public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) { | ||
46 | - responseContext.getHeaders().putSingle("Authorization", "enabled"); | ||
47 | - responseContext.getHeaders().putSingle("x-content-type-options", "nosniff"); | ||
48 | - responseContext.getHeaders().putSingle("x-frame-options", "SAMEORIGIN"); | ||
49 | - responseContext.getHeaders().putSingle("x-xss-protection", "1; mode=block"); | ||
50 | - } | ||
51 | - | ||
52 | - @Override | ||
53 | - public void filter(ContainerRequestContext requestContext) throws IOException { | ||
54 | - try { | ||
55 | - if (requestContext.getHeaders().containsKey("Authorization")) { | ||
56 | - String token = requestContext.getHeaders().get("Authorization").toString().replace("[", "").replace("]", ""); | ||
57 | - if (!token.isEmpty()) { | ||
58 | - securityContext.setToken(token); | ||
59 | - } | ||
60 | - } | ||
61 | - } catch (Exception e) { | ||
62 | - } | ||
63 | - | ||
64 | - } | ||
65 | - | ||
66 | - @Override | ||
67 | - public void filter(ClientRequestContext requestContext) throws IOException { | ||
68 | - | ||
69 | - } | ||
70 | - | ||
71 | - @Override | ||
72 | - public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException { | ||
73 | - | ||
74 | - } | ||
75 | - | ||
76 | -} |
demoiselle-security/src/main/java/org/demoiselle/jee/security/LoggedUser.java
@@ -1,67 +0,0 @@ | @@ -1,67 +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.security; | ||
8 | - | ||
9 | -import java.util.List; | ||
10 | -import java.util.Map; | ||
11 | - | ||
12 | -import javax.enterprise.context.RequestScoped; | ||
13 | - | ||
14 | -/** | ||
15 | - * | ||
16 | - * @author 70744416353 | ||
17 | - */ | ||
18 | -@RequestScoped | ||
19 | -public class LoggedUser { | ||
20 | - | ||
21 | - private String id; | ||
22 | - private String username; | ||
23 | - private String email; | ||
24 | - private Map<String, String> premissions; | ||
25 | - private List<String> roles; | ||
26 | - | ||
27 | - public String getId() { | ||
28 | - return id; | ||
29 | - } | ||
30 | - | ||
31 | - public void setId(String id) { | ||
32 | - this.id = id; | ||
33 | - } | ||
34 | - | ||
35 | - public String getUsername() { | ||
36 | - return username; | ||
37 | - } | ||
38 | - | ||
39 | - public void setUsername(String username) { | ||
40 | - this.username = username; | ||
41 | - } | ||
42 | - | ||
43 | - public String getEmail() { | ||
44 | - return email; | ||
45 | - } | ||
46 | - | ||
47 | - public void setEmail(String email) { | ||
48 | - this.email = email; | ||
49 | - } | ||
50 | - | ||
51 | - public Map<String, String> getPremissions() { | ||
52 | - return premissions; | ||
53 | - } | ||
54 | - | ||
55 | - public void setPremissions(Map<String, String> premissions) { | ||
56 | - this.premissions = premissions; | ||
57 | - } | ||
58 | - | ||
59 | - public List<String> getRoles() { | ||
60 | - return roles; | ||
61 | - } | ||
62 | - | ||
63 | - public void setRoles(List<String> roles) { | ||
64 | - this.roles = roles; | ||
65 | - } | ||
66 | - | ||
67 | -} |
demoiselle-security/src/main/java/org/demoiselle/jee/security/Token.java
@@ -1,28 +0,0 @@ | @@ -1,28 +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.security; | ||
8 | - | ||
9 | -import javax.enterprise.context.RequestScoped; | ||
10 | - | ||
11 | -/** | ||
12 | - * | ||
13 | - * @author 70744416353 | ||
14 | - */ | ||
15 | -@RequestScoped | ||
16 | -public class Token { | ||
17 | - | ||
18 | - private String key; | ||
19 | - | ||
20 | - public String getKey() { | ||
21 | - return key; | ||
22 | - } | ||
23 | - | ||
24 | - public void setKey(String key) { | ||
25 | - this.key = key; | ||
26 | - } | ||
27 | - | ||
28 | -} |
demoiselle-security/src/main/java/org/demoiselle/jee/security/annotation/LoggedIn.java
0 → 100644
@@ -0,0 +1,31 @@ | @@ -0,0 +1,31 @@ | ||
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.security.annotation; | ||
8 | + | ||
9 | +import javax.interceptor.InterceptorBinding; | ||
10 | +import java.lang.annotation.Inherited; | ||
11 | +import java.lang.annotation.Retention; | ||
12 | +import java.lang.annotation.Target; | ||
13 | + | ||
14 | +import static java.lang.annotation.ElementType.METHOD; | ||
15 | +import static java.lang.annotation.ElementType.TYPE; | ||
16 | +import static java.lang.annotation.RetentionPolicy.RUNTIME; | ||
17 | + | ||
18 | +/** | ||
19 | + * <p> | ||
20 | + * Indicates that a specific permission is required in order to invocate the annotated method or class. | ||
21 | + * </p> | ||
22 | + * | ||
23 | + * @author SERPRO | ||
24 | + */ | ||
25 | + | ||
26 | +@Inherited | ||
27 | +@InterceptorBinding | ||
28 | +@Target({ METHOD, TYPE }) | ||
29 | +@Retention(RUNTIME) | ||
30 | +public @interface LoggedIn { | ||
31 | +} |
demoiselle-security/src/main/java/org/demoiselle/jee/security/annotation/RequiredPermission.java
0 → 100644
@@ -0,0 +1,35 @@ | @@ -0,0 +1,35 @@ | ||
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.security.annotation; | ||
8 | + | ||
9 | +import javax.enterprise.util.Nonbinding; | ||
10 | +import javax.interceptor.InterceptorBinding; | ||
11 | +import java.lang.annotation.Inherited; | ||
12 | +import java.lang.annotation.Retention; | ||
13 | +import java.lang.annotation.Target; | ||
14 | + | ||
15 | +import static java.lang.annotation.ElementType.METHOD; | ||
16 | +import static java.lang.annotation.ElementType.TYPE; | ||
17 | +import static java.lang.annotation.RetentionPolicy.RUNTIME; | ||
18 | + | ||
19 | +/** | ||
20 | + * Indicates that a specific permission is required in order to invocate the annotated method or class. | ||
21 | + * | ||
22 | + * @author SERPRO | ||
23 | + */ | ||
24 | +@Inherited | ||
25 | +@InterceptorBinding | ||
26 | +@Target({ METHOD, TYPE }) | ||
27 | +@Retention(RUNTIME) | ||
28 | +public @interface RequiredPermission { | ||
29 | + | ||
30 | + @Nonbinding | ||
31 | + String resource() default ""; | ||
32 | + | ||
33 | + @Nonbinding | ||
34 | + String operation() default ""; | ||
35 | +} |
demoiselle-security/src/main/java/org/demoiselle/jee/security/annotation/RequiredRole.java
0 → 100644
@@ -0,0 +1,35 @@ | @@ -0,0 +1,35 @@ | ||
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.security.annotation; | ||
8 | + | ||
9 | +import javax.enterprise.util.Nonbinding; | ||
10 | +import javax.interceptor.InterceptorBinding; | ||
11 | +import java.lang.annotation.Inherited; | ||
12 | +import java.lang.annotation.Retention; | ||
13 | +import java.lang.annotation.Target; | ||
14 | + | ||
15 | +import static java.lang.annotation.ElementType.METHOD; | ||
16 | +import static java.lang.annotation.ElementType.TYPE; | ||
17 | +import static java.lang.annotation.RetentionPolicy.RUNTIME; | ||
18 | + | ||
19 | +/** | ||
20 | + * <p> | ||
21 | + * Indicates that the annotated method or class requires the user to have one or more roles associated in order to be | ||
22 | + * invocated. | ||
23 | + * </p> | ||
24 | + * | ||
25 | + * @author SERPRO | ||
26 | + */ | ||
27 | +@Inherited | ||
28 | +@InterceptorBinding | ||
29 | +@Target({ METHOD, TYPE }) | ||
30 | +@Retention(RUNTIME) | ||
31 | +public @interface RequiredRole { | ||
32 | + | ||
33 | + @Nonbinding | ||
34 | + String[] value(); | ||
35 | +} |
demoiselle-security/src/main/java/org/demoiselle/jee/security/annotations/LoggedIn.java
@@ -1,31 +0,0 @@ | @@ -1,31 +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.security.annotations; | ||
8 | - | ||
9 | -import javax.interceptor.InterceptorBinding; | ||
10 | -import java.lang.annotation.Inherited; | ||
11 | -import java.lang.annotation.Retention; | ||
12 | -import java.lang.annotation.Target; | ||
13 | - | ||
14 | -import static java.lang.annotation.ElementType.METHOD; | ||
15 | -import static java.lang.annotation.ElementType.TYPE; | ||
16 | -import static java.lang.annotation.RetentionPolicy.RUNTIME; | ||
17 | - | ||
18 | -/** | ||
19 | - * <p> | ||
20 | - * Indicates that a specific permission is required in order to invocate the annotated method or class. | ||
21 | - * </p> | ||
22 | - * | ||
23 | - * @author SERPRO | ||
24 | - */ | ||
25 | - | ||
26 | -@Inherited | ||
27 | -@InterceptorBinding | ||
28 | -@Target({ METHOD, TYPE }) | ||
29 | -@Retention(RUNTIME) | ||
30 | -public @interface LoggedIn { | ||
31 | -} |
demoiselle-security/src/main/java/org/demoiselle/jee/security/annotations/RequiredPermission.java
@@ -1,35 +0,0 @@ | @@ -1,35 +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.security.annotations; | ||
8 | - | ||
9 | -import javax.enterprise.util.Nonbinding; | ||
10 | -import javax.interceptor.InterceptorBinding; | ||
11 | -import java.lang.annotation.Inherited; | ||
12 | -import java.lang.annotation.Retention; | ||
13 | -import java.lang.annotation.Target; | ||
14 | - | ||
15 | -import static java.lang.annotation.ElementType.METHOD; | ||
16 | -import static java.lang.annotation.ElementType.TYPE; | ||
17 | -import static java.lang.annotation.RetentionPolicy.RUNTIME; | ||
18 | - | ||
19 | -/** | ||
20 | - * Indicates that a specific permission is required in order to invocate the annotated method or class. | ||
21 | - * | ||
22 | - * @author SERPRO | ||
23 | - */ | ||
24 | -@Inherited | ||
25 | -@InterceptorBinding | ||
26 | -@Target({ METHOD, TYPE }) | ||
27 | -@Retention(RUNTIME) | ||
28 | -public @interface RequiredPermission { | ||
29 | - | ||
30 | - @Nonbinding | ||
31 | - String resource() default ""; | ||
32 | - | ||
33 | - @Nonbinding | ||
34 | - String operation() default ""; | ||
35 | -} |
demoiselle-security/src/main/java/org/demoiselle/jee/security/annotations/RequiredRole.java
@@ -1,35 +0,0 @@ | @@ -1,35 +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.security.annotations; | ||
8 | - | ||
9 | -import javax.enterprise.util.Nonbinding; | ||
10 | -import javax.interceptor.InterceptorBinding; | ||
11 | -import java.lang.annotation.Inherited; | ||
12 | -import java.lang.annotation.Retention; | ||
13 | -import java.lang.annotation.Target; | ||
14 | - | ||
15 | -import static java.lang.annotation.ElementType.METHOD; | ||
16 | -import static java.lang.annotation.ElementType.TYPE; | ||
17 | -import static java.lang.annotation.RetentionPolicy.RUNTIME; | ||
18 | - | ||
19 | -/** | ||
20 | - * <p> | ||
21 | - * Indicates that the annotated method or class requires the user to have one or more roles associated in order to be | ||
22 | - * invocated. | ||
23 | - * </p> | ||
24 | - * | ||
25 | - * @author SERPRO | ||
26 | - */ | ||
27 | -@Inherited | ||
28 | -@InterceptorBinding | ||
29 | -@Target({ METHOD, TYPE }) | ||
30 | -@Retention(RUNTIME) | ||
31 | -public @interface RequiredRole { | ||
32 | - | ||
33 | - @Nonbinding | ||
34 | - String[] value(); | ||
35 | -} |
demoiselle-security/src/main/java/org/demoiselle/jee/security/filter/JaxRsFilter.java
0 → 100644
@@ -0,0 +1,79 @@ | @@ -0,0 +1,79 @@ | ||
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.security.filter; | ||
8 | + | ||
9 | +import java.io.IOException; | ||
10 | +import java.util.logging.Logger; | ||
11 | +import javax.annotation.PostConstruct; | ||
12 | +import javax.inject.Inject; | ||
13 | +import javax.ws.rs.client.ClientRequestContext; | ||
14 | +import javax.ws.rs.client.ClientRequestFilter; | ||
15 | +import javax.ws.rs.client.ClientResponseContext; | ||
16 | +import javax.ws.rs.client.ClientResponseFilter; | ||
17 | +import javax.ws.rs.container.ContainerRequestContext; | ||
18 | +import javax.ws.rs.container.ContainerRequestFilter; | ||
19 | +import javax.ws.rs.container.ContainerResponseContext; | ||
20 | +import javax.ws.rs.container.ContainerResponseFilter; | ||
21 | +import javax.ws.rs.container.PreMatching; | ||
22 | +import javax.ws.rs.ext.Provider; | ||
23 | +import org.demoiselle.jee.core.interfaces.security.SecurityContext; | ||
24 | +import org.demoiselle.jee.core.interfaces.security.Token; | ||
25 | + | ||
26 | +/** | ||
27 | + * | ||
28 | + * @author 70744416353 | ||
29 | + */ | ||
30 | +@Provider | ||
31 | +@PreMatching | ||
32 | +public class JaxRsFilter implements ClientRequestFilter, ClientResponseFilter, ContainerRequestFilter, ContainerResponseFilter { | ||
33 | + | ||
34 | + @Inject | ||
35 | + private Logger LOG; | ||
36 | + | ||
37 | + @Inject | ||
38 | + private Token token; | ||
39 | + | ||
40 | + @PostConstruct | ||
41 | + public void init() { | ||
42 | + LOG.info("Demoiselle Module - Security"); | ||
43 | + } | ||
44 | + | ||
45 | + @Override | ||
46 | + public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) { | ||
47 | + responseContext.getHeaders().putSingle("Authorization", "enabled"); | ||
48 | + responseContext.getHeaders().putSingle("x-content-type-options", "nosniff"); | ||
49 | + responseContext.getHeaders().putSingle("x-frame-options", "SAMEORIGIN"); | ||
50 | + responseContext.getHeaders().putSingle("x-xss-protection", "1; mode=block"); | ||
51 | + } | ||
52 | + | ||
53 | + @Override | ||
54 | + public void filter(ContainerRequestContext requestContext) throws IOException { | ||
55 | + try { | ||
56 | + if (requestContext.getHeaders().containsKey("Authorization")) { | ||
57 | + String chave = requestContext.getHeaders().get("Authorization").toString().replace("[", "").replace("]", ""); | ||
58 | + if (!chave.isEmpty()) { | ||
59 | + token.setType(chave.split(" ")[0]); | ||
60 | + token.setKey(chave.split(" ")[1]); | ||
61 | + } | ||
62 | + } | ||
63 | + } catch (Exception e) { | ||
64 | + LOG.fine(e.getMessage()); | ||
65 | + } | ||
66 | + | ||
67 | + } | ||
68 | + | ||
69 | + @Override | ||
70 | + public void filter(ClientRequestContext requestContext) throws IOException { | ||
71 | + | ||
72 | + } | ||
73 | + | ||
74 | + @Override | ||
75 | + public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException { | ||
76 | + | ||
77 | + } | ||
78 | + | ||
79 | +} |
demoiselle-security/src/main/java/org/demoiselle/jee/security/impl/SecurityContextImpl.java
@@ -7,18 +7,17 @@ | @@ -7,18 +7,17 @@ | ||
7 | package org.demoiselle.jee.security.impl; | 7 | package org.demoiselle.jee.security.impl; |
8 | 8 | ||
9 | import java.security.Principal; | 9 | import java.security.Principal; |
10 | +import java.util.List; | ||
10 | import java.util.Map; | 11 | import java.util.Map; |
11 | -import java.util.Set; | ||
12 | - | ||
13 | import javax.enterprise.context.Dependent; | 12 | import javax.enterprise.context.Dependent; |
14 | import javax.inject.Inject; | 13 | import javax.inject.Inject; |
15 | 14 | ||
16 | import org.demoiselle.jee.core.util.ResourceBundle; | 15 | import org.demoiselle.jee.core.util.ResourceBundle; |
17 | -import org.demoiselle.jee.security.LoggedUser; | ||
18 | -import org.demoiselle.jee.security.Token; | 16 | + |
19 | import org.demoiselle.jee.security.exception.NotLoggedInException; | 17 | import org.demoiselle.jee.security.exception.NotLoggedInException; |
20 | -import org.demoiselle.jee.security.interfaces.SecurityContext; | ||
21 | -import org.demoiselle.jee.security.interfaces.TokensManager; | 18 | +import org.demoiselle.jee.core.interfaces.security.SecurityContext; |
19 | +import org.demoiselle.jee.core.interfaces.security.Token; | ||
20 | +import org.demoiselle.jee.core.interfaces.security.TokensManager; | ||
22 | 21 | ||
23 | /** | 22 | /** |
24 | * <p> | 23 | * <p> |
@@ -36,12 +35,6 @@ public class SecurityContextImpl implements SecurityContext { | @@ -36,12 +35,6 @@ public class SecurityContextImpl implements SecurityContext { | ||
36 | private TokensManager tm; | 35 | private TokensManager tm; |
37 | 36 | ||
38 | @Inject | 37 | @Inject |
39 | - private Token token; | ||
40 | - | ||
41 | - @Inject | ||
42 | - private LoggedUser loggedUser; | ||
43 | - | ||
44 | - @Inject | ||
45 | private ResourceBundle bundle; | 38 | private ResourceBundle bundle; |
46 | 39 | ||
47 | /** | 40 | /** |
@@ -70,20 +63,10 @@ public class SecurityContextImpl implements SecurityContext { | @@ -70,20 +63,10 @@ public class SecurityContextImpl implements SecurityContext { | ||
70 | */ | 63 | */ |
71 | @Override | 64 | @Override |
72 | public boolean isLoggedIn() { | 65 | public boolean isLoggedIn() { |
73 | - return getUser() != null; | 66 | + return tm.validate(); |
74 | } | 67 | } |
75 | 68 | ||
76 | - /** | ||
77 | - * @see org.demoiselle.security.SecurityContext#getUser() | ||
78 | - */ | ||
79 | @Override | 69 | @Override |
80 | - public Principal getUser() { | ||
81 | -// if (token.getKey() != null && !token.getKey().isEmpty()) { | ||
82 | -// return tm.getUser(token.getKey()); | ||
83 | -// } | ||
84 | - return null;//token.getPrincipal(); | ||
85 | - } | ||
86 | - | ||
87 | public void checkLoggedIn() throws NotLoggedInException { | 70 | public void checkLoggedIn() throws NotLoggedInException { |
88 | if (!isLoggedIn()) { | 71 | if (!isLoggedIn()) { |
89 | throw new NotLoggedInException(bundle.getString("user-not-authenticated")); | 72 | throw new NotLoggedInException(bundle.getString("user-not-authenticated")); |
@@ -91,46 +74,13 @@ public class SecurityContextImpl implements SecurityContext { | @@ -91,46 +74,13 @@ public class SecurityContextImpl implements SecurityContext { | ||
91 | } | 74 | } |
92 | 75 | ||
93 | @Override | 76 | @Override |
94 | - public void setRoles(Set<String> roles) { | ||
95 | - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. | ||
96 | - } | ||
97 | - | ||
98 | - @Override | ||
99 | - public void setPermission(Map<String, String> permissions) { | ||
100 | - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. | ||
101 | - } | ||
102 | - | ||
103 | - @Override | ||
104 | - public Set<String> getResources(String operation) { | ||
105 | - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. | ||
106 | - } | ||
107 | - | ||
108 | - @Override | ||
109 | - public Set<String> getOperations(String resources) { | ||
110 | - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. | ||
111 | - } | ||
112 | - | ||
113 | - @Override | ||
114 | - public void setUser(Principal principal) { | ||
115 | -// token.setKey(tm.getToken(principal)); | ||
116 | -// token.setPrincipal(principal); | ||
117 | - } | ||
118 | - | ||
119 | - @Override | ||
120 | - public String getToken() { | ||
121 | -// if (token.getKey() != null && token.getKey().isEmpty()) { | ||
122 | -// token.setKey(tm.getToken(token.getPrincipal())); | ||
123 | -// } | ||
124 | - return token.getKey(); | 77 | + public Principal getUser() { |
78 | + return tm.getUser(); | ||
125 | } | 79 | } |
126 | 80 | ||
127 | @Override | 81 | @Override |
128 | - public void setToken(String chave) { | ||
129 | -// token.setPrincipal(tm.getUser(chave)); | ||
130 | -// if (token.getPrincipal() == null) { | ||
131 | -// throw new NotLoggedInException(bundle.getString("user-not-authenticated")); | ||
132 | -// } | ||
133 | - token.setKey(chave); | 82 | + public void setUser(Principal loggedUser) { |
83 | + tm.setUser(loggedUser); | ||
134 | } | 84 | } |
135 | 85 | ||
136 | } | 86 | } |
demoiselle-security/src/main/java/org/demoiselle/jee/security/impl/TokenImpl.java
0 → 100644
@@ -0,0 +1,41 @@ | @@ -0,0 +1,41 @@ | ||
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.security.impl; | ||
7 | + | ||
8 | +import javax.enterprise.context.Dependent; | ||
9 | +import org.demoiselle.jee.core.interfaces.security.Token; | ||
10 | + | ||
11 | +/** | ||
12 | + * | ||
13 | + * @author 70744416353 | ||
14 | + */ | ||
15 | +@Dependent | ||
16 | +public class TokenImpl implements Token { | ||
17 | + | ||
18 | + private String key; | ||
19 | + private String type; | ||
20 | + | ||
21 | + @Override | ||
22 | + public String getKey() { | ||
23 | + return key; | ||
24 | + } | ||
25 | + | ||
26 | + @Override | ||
27 | + public void setKey(String key) { | ||
28 | + this.key = key; | ||
29 | + } | ||
30 | + | ||
31 | + @Override | ||
32 | + public String getType() { | ||
33 | + return type; | ||
34 | + } | ||
35 | + | ||
36 | + @Override | ||
37 | + public void setType(String type) { | ||
38 | + this.type = type; | ||
39 | + } | ||
40 | + | ||
41 | +} |
demoiselle-security/src/main/java/org/demoiselle/jee/security/interceptor/LoggedInInterceptor.java
@@ -12,8 +12,8 @@ import javax.interceptor.AroundInvoke; | @@ -12,8 +12,8 @@ import javax.interceptor.AroundInvoke; | ||
12 | import javax.interceptor.Interceptor; | 12 | import javax.interceptor.Interceptor; |
13 | import javax.interceptor.InvocationContext; | 13 | import javax.interceptor.InvocationContext; |
14 | import java.io.Serializable; | 14 | import java.io.Serializable; |
15 | -import org.demoiselle.jee.security.annotations.LoggedIn; | ||
16 | -import org.demoiselle.jee.security.interfaces.SecurityContext; | 15 | +import org.demoiselle.jee.security.annotation.LoggedIn; |
16 | +import org.demoiselle.jee.core.interfaces.security.SecurityContext; | ||
17 | 17 | ||
18 | /** | 18 | /** |
19 | * <p> | 19 | * <p> |
demoiselle-security/src/main/java/org/demoiselle/jee/security/interceptor/RequiredPermissionInterceptor.java
@@ -9,19 +9,18 @@ package org.demoiselle.jee.security.interceptor; | @@ -9,19 +9,18 @@ package org.demoiselle.jee.security.interceptor; | ||
9 | import org.demoiselle.jee.security.exception.AuthorizationException; | 9 | import org.demoiselle.jee.security.exception.AuthorizationException; |
10 | 10 | ||
11 | import javax.annotation.Priority; | 11 | import javax.annotation.Priority; |
12 | -import javax.enterprise.inject.spi.CDI; | ||
13 | import javax.interceptor.AroundInvoke; | 12 | import javax.interceptor.AroundInvoke; |
14 | import javax.interceptor.Interceptor; | 13 | import javax.interceptor.Interceptor; |
15 | import javax.interceptor.InvocationContext; | 14 | import javax.interceptor.InvocationContext; |
16 | import java.io.Serializable; | 15 | import java.io.Serializable; |
16 | +import java.security.Principal; | ||
17 | import java.util.logging.Logger; | 17 | import java.util.logging.Logger; |
18 | import javax.inject.Inject; | 18 | import javax.inject.Inject; |
19 | -import static javax.sql.rowset.spi.SyncFactory.getLogger; | ||
20 | import org.demoiselle.jee.core.annotation.Name; | 19 | import org.demoiselle.jee.core.annotation.Name; |
21 | import org.demoiselle.jee.core.util.ResourceBundle; | 20 | import org.demoiselle.jee.core.util.ResourceBundle; |
22 | import org.demoiselle.jee.core.util.Strings; | 21 | import org.demoiselle.jee.core.util.Strings; |
23 | -import org.demoiselle.jee.security.annotations.RequiredPermission; | ||
24 | -import org.demoiselle.jee.security.interfaces.SecurityContext; | 22 | +import org.demoiselle.jee.security.annotation.RequiredPermission; |
23 | +import org.demoiselle.jee.core.interfaces.security.SecurityContext; | ||
25 | 24 | ||
26 | /** | 25 | /** |
27 | * <p> | 26 | * <p> |
@@ -38,6 +37,12 @@ public class RequiredPermissionInterceptor implements Serializable { | @@ -38,6 +37,12 @@ public class RequiredPermissionInterceptor implements Serializable { | ||
38 | private static final long serialVersionUID = 1L; | 37 | private static final long serialVersionUID = 1L; |
39 | 38 | ||
40 | @Inject | 39 | @Inject |
40 | + private SecurityContext securityContext; | ||
41 | + | ||
42 | + @Inject | ||
43 | + private Principal loggedUser; | ||
44 | + | ||
45 | + @Inject | ||
41 | private ResourceBundle bundle; | 46 | private ResourceBundle bundle; |
42 | 47 | ||
43 | @Inject | 48 | @Inject |
@@ -66,17 +71,17 @@ public class RequiredPermissionInterceptor implements Serializable { | @@ -66,17 +71,17 @@ public class RequiredPermissionInterceptor implements Serializable { | ||
66 | String operation = getOperation(ic); | 71 | String operation = getOperation(ic); |
67 | String username = null; | 72 | String username = null; |
68 | 73 | ||
69 | - if (getSecurityContext().isLoggedIn()) { | ||
70 | - username = getSecurityContext().getUser().getName(); | ||
71 | - getLogger().finest(bundle.getString("access-checking", username, operation, resource)); | 74 | + if (securityContext.isLoggedIn()) { |
75 | + username = loggedUser.getName(); | ||
76 | + logger.finest(bundle.getString("access-checking", username, operation, resource)); | ||
72 | } | 77 | } |
73 | 78 | ||
74 | - if (!getSecurityContext().hasPermission(resource, operation)) { | ||
75 | - getLogger().severe(bundle.getString("access-denied", username, operation, resource)); | 79 | + if (securityContext.hasPermission(resource, operation)) { |
80 | + logger.severe(bundle.getString("access-denied", username, operation, resource)); | ||
76 | throw new AuthorizationException(bundle.getString("access-denied-ui", resource, operation)); | 81 | throw new AuthorizationException(bundle.getString("access-denied-ui", resource, operation)); |
77 | } | 82 | } |
78 | 83 | ||
79 | - getLogger().fine(bundle.getString("access-allowed", username, operation, resource)); | 84 | + logger.fine(bundle.getString("access-allowed", username, operation, resource)); |
80 | return ic.proceed(); | 85 | return ic.proceed(); |
81 | } | 86 | } |
82 | 87 | ||
@@ -144,7 +149,4 @@ public class RequiredPermissionInterceptor implements Serializable { | @@ -144,7 +149,4 @@ public class RequiredPermissionInterceptor implements Serializable { | ||
144 | } | 149 | } |
145 | } | 150 | } |
146 | 151 | ||
147 | - private SecurityContext getSecurityContext() { | ||
148 | - return CDI.current().select(SecurityContext.class).get(); | ||
149 | - } | ||
150 | } | 152 | } |
demoiselle-security/src/main/java/org/demoiselle/jee/security/interceptor/RequiredRoleInterceptor.java
@@ -9,11 +9,11 @@ package org.demoiselle.jee.security.interceptor; | @@ -9,11 +9,11 @@ package org.demoiselle.jee.security.interceptor; | ||
9 | import org.demoiselle.jee.security.exception.AuthorizationException; | 9 | import org.demoiselle.jee.security.exception.AuthorizationException; |
10 | 10 | ||
11 | import javax.annotation.Priority; | 11 | import javax.annotation.Priority; |
12 | -import javax.enterprise.inject.spi.CDI; | ||
13 | import javax.interceptor.AroundInvoke; | 12 | import javax.interceptor.AroundInvoke; |
14 | import javax.interceptor.Interceptor; | 13 | import javax.interceptor.Interceptor; |
15 | import javax.interceptor.InvocationContext; | 14 | import javax.interceptor.InvocationContext; |
16 | import java.io.Serializable; | 15 | import java.io.Serializable; |
16 | +import java.security.Principal; | ||
17 | import java.util.ArrayList; | 17 | import java.util.ArrayList; |
18 | import java.util.Arrays; | 18 | import java.util.Arrays; |
19 | import java.util.List; | 19 | import java.util.List; |
@@ -21,8 +21,8 @@ import java.util.List; | @@ -21,8 +21,8 @@ import java.util.List; | ||
21 | import java.util.logging.Logger; | 21 | import java.util.logging.Logger; |
22 | import javax.inject.Inject; | 22 | import javax.inject.Inject; |
23 | import org.demoiselle.jee.core.util.ResourceBundle; | 23 | import org.demoiselle.jee.core.util.ResourceBundle; |
24 | -import org.demoiselle.jee.security.annotations.RequiredRole; | ||
25 | -import org.demoiselle.jee.security.interfaces.SecurityContext; | 24 | +import org.demoiselle.jee.security.annotation.RequiredRole; |
25 | +import org.demoiselle.jee.core.interfaces.security.SecurityContext; | ||
26 | 26 | ||
27 | /** | 27 | /** |
28 | * <p> | 28 | * <p> |
@@ -39,6 +39,12 @@ public class RequiredRoleInterceptor implements Serializable { | @@ -39,6 +39,12 @@ public class RequiredRoleInterceptor implements Serializable { | ||
39 | private static final long serialVersionUID = 1L; | 39 | private static final long serialVersionUID = 1L; |
40 | 40 | ||
41 | @Inject | 41 | @Inject |
42 | + private SecurityContext securityContext; | ||
43 | + | ||
44 | + @Inject | ||
45 | + private Principal loggedUser; | ||
46 | + | ||
47 | + @Inject | ||
42 | private ResourceBundle bundle; | 48 | private ResourceBundle bundle; |
43 | 49 | ||
44 | @Inject | 50 | @Inject |
@@ -64,27 +70,27 @@ public class RequiredRoleInterceptor implements Serializable { | @@ -64,27 +70,27 @@ public class RequiredRoleInterceptor implements Serializable { | ||
64 | public Object manage(final InvocationContext ic) throws Exception { | 70 | public Object manage(final InvocationContext ic) throws Exception { |
65 | List<String> roles = getRoles(ic); | 71 | List<String> roles = getRoles(ic); |
66 | 72 | ||
67 | - if (getSecurityContext().isLoggedIn()) { | 73 | + if (securityContext.isLoggedIn()) { |
68 | logger.info( | 74 | logger.info( |
69 | - bundle.getString("has-role-verification", getSecurityContext().getUser().getName(), roles)); | 75 | + bundle.getString("has-role-verification", loggedUser.getName(), roles)); |
70 | } | 76 | } |
71 | 77 | ||
72 | List<String> userRoles = new ArrayList<String>(); | 78 | List<String> userRoles = new ArrayList<String>(); |
73 | 79 | ||
74 | for (String role : roles) { | 80 | for (String role : roles) { |
75 | - if (getSecurityContext().hasRole(role)) { | 81 | + if (securityContext.hasRole(role)) { |
76 | userRoles.add(role); | 82 | userRoles.add(role); |
77 | } | 83 | } |
78 | } | 84 | } |
79 | 85 | ||
80 | if (userRoles.isEmpty()) { | 86 | if (userRoles.isEmpty()) { |
81 | logger.severe( | 87 | logger.severe( |
82 | - bundle.getString("does-not-have-role", getSecurityContext().getUser().getName(), roles)); | 88 | + bundle.getString("does-not-have-role", loggedUser.getName(), roles)); |
83 | 89 | ||
84 | throw new AuthorizationException(bundle.getString("does-not-have-role-ui", roles)); | 90 | throw new AuthorizationException(bundle.getString("does-not-have-role-ui", roles)); |
85 | } | 91 | } |
86 | 92 | ||
87 | - logger.fine(bundle.getString("user-has-role", getSecurityContext().getUser().getName(), userRoles)); | 93 | + logger.fine(bundle.getString("user-has-role", loggedUser.getName(), userRoles)); |
88 | 94 | ||
89 | return ic.proceed(); | 95 | return ic.proceed(); |
90 | } | 96 | } |
@@ -110,8 +116,4 @@ public class RequiredRoleInterceptor implements Serializable { | @@ -110,8 +116,4 @@ public class RequiredRoleInterceptor implements Serializable { | ||
110 | return Arrays.asList(roles); | 116 | return Arrays.asList(roles); |
111 | } | 117 | } |
112 | 118 | ||
113 | - private SecurityContext getSecurityContext() { | ||
114 | - return CDI.current().select(SecurityContext.class).get(); | ||
115 | - } | ||
116 | - | ||
117 | } | 119 | } |
demoiselle-security/src/main/java/org/demoiselle/jee/security/interfaces/LoggedUser.java
@@ -1,38 +0,0 @@ | @@ -1,38 +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.security.interfaces; | ||
8 | - | ||
9 | -import java.io.Serializable; | ||
10 | -import java.security.Principal; | ||
11 | -import java.util.List; | ||
12 | -import java.util.Map; | ||
13 | - | ||
14 | -import javax.enterprise.context.RequestScoped; | ||
15 | - | ||
16 | -/** | ||
17 | - * <p> | ||
18 | - * Structure used to handle both authentication and authorizations mechanisms. | ||
19 | - * </p> | ||
20 | - * | ||
21 | - * @author SERPRO | ||
22 | - */ | ||
23 | -@RequestScoped | ||
24 | -public interface LoggedUser extends Principal, Serializable { | ||
25 | - | ||
26 | - public String getId(); | ||
27 | - | ||
28 | - public void setId(String id); | ||
29 | - | ||
30 | - public Map<String, String> getPermissions(); | ||
31 | - | ||
32 | - public void setPermissions(Map<String, String> premissions); | ||
33 | - | ||
34 | - public List<String> getRoles(); | ||
35 | - | ||
36 | - public void setRoles(List<String> roles); | ||
37 | - | ||
38 | -} |
demoiselle-security/src/main/java/org/demoiselle/jee/security/interfaces/SecurityContext.java
@@ -1,86 +0,0 @@ | @@ -1,86 +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.security.interfaces; | ||
8 | - | ||
9 | -import java.io.Serializable; | ||
10 | -import java.security.Principal; | ||
11 | -import java.util.Map; | ||
12 | -import java.util.Set; | ||
13 | -import org.demoiselle.jee.security.exception.AuthorizationException; | ||
14 | -import org.demoiselle.jee.security.exception.NotLoggedInException; | ||
15 | - | ||
16 | -/** | ||
17 | - * <p> | ||
18 | - * Structure used to handle both authentication and authorizations mechanisms. | ||
19 | - * </p> | ||
20 | - * | ||
21 | - * @author SERPRO | ||
22 | - */ | ||
23 | -public interface SecurityContext extends Serializable { | ||
24 | - | ||
25 | - /** | ||
26 | - * Checks if a specific user is logged in. | ||
27 | - * | ||
28 | - * @return {@code true} if the user is logged in | ||
29 | - */ | ||
30 | - boolean isLoggedIn(); | ||
31 | - | ||
32 | - /** | ||
33 | - * @throws NotLoggedInException if there is no user logged in a specific | ||
34 | - * session | ||
35 | - */ | ||
36 | - void checkLoggedIn(); | ||
37 | - | ||
38 | - /** | ||
39 | - * Checks if the logged user has permission to execute an specific operation | ||
40 | - * on a specific resource. | ||
41 | - * | ||
42 | - * @param resource resource to be checked | ||
43 | - * @param operation operation to be checked | ||
44 | - * @return {@code true} if the user has the permission | ||
45 | - * @throws AuthorizationException When the permission checking fails, this | ||
46 | - * exception is thrown. | ||
47 | - * @throws NotLoggedInException if there is no user logged in a specific | ||
48 | - * session. | ||
49 | - */ | ||
50 | - boolean hasPermission(String resource, String operation); | ||
51 | - | ||
52 | - /** | ||
53 | - * Checks if the logged user has an specific role | ||
54 | - * | ||
55 | - * @param role role to be checked | ||
56 | - * @return {@code true} if the user has the role | ||
57 | - * @throws AuthorizationException When the permission checking fails, this | ||
58 | - * exception is thrown. | ||
59 | - * @throws NotLoggedInException if there is no user logged in a specific | ||
60 | - * session. | ||
61 | - */ | ||
62 | - boolean hasRole(String role); | ||
63 | - | ||
64 | - /** | ||
65 | - * Return the user logged in the session. | ||
66 | - * | ||
67 | - * @return the user logged in a specific authenticated session. If there is | ||
68 | - * no active session {@code null} is returned. | ||
69 | - */ | ||
70 | - Principal getUser(); | ||
71 | - | ||
72 | - void setUser(Principal principal); | ||
73 | - | ||
74 | - String getToken(); | ||
75 | - | ||
76 | - void setToken(String token); | ||
77 | - | ||
78 | - void setRoles(Set<String> roles); | ||
79 | - | ||
80 | - void setPermission(Map<String, String> permissions); | ||
81 | - | ||
82 | - Set<String> getResources(String operation); | ||
83 | - | ||
84 | - Set<String> getOperations(String resources); | ||
85 | - | ||
86 | -} |
demoiselle-security/src/main/java/org/demoiselle/jee/security/interfaces/TokensManager.java
@@ -1,27 +0,0 @@ | @@ -1,27 +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.security.interfaces; | ||
8 | - | ||
9 | -import java.io.Serializable; | ||
10 | - | ||
11 | -import org.demoiselle.jee.security.LoggedUser; | ||
12 | -import org.demoiselle.jee.security.Token; | ||
13 | - | ||
14 | -/** | ||
15 | - * <p> | ||
16 | - * Structure used to handle both authentication and authorizations mechanisms. | ||
17 | - * </p> | ||
18 | - * | ||
19 | - * @author SERPRO | ||
20 | - */ | ||
21 | -public interface TokensManager extends Serializable { | ||
22 | - | ||
23 | - public LoggedUser getUser(Token token); | ||
24 | - | ||
25 | - public String create(LoggedUser user); | ||
26 | - | ||
27 | -} |
demoiselle-ws-jaxrs/.gitignore
demoiselle-ws-jaxrs/pom.xml
@@ -1,37 +0,0 @@ | @@ -1,37 +0,0 @@ | ||
1 | -<?xml version="1.0" encoding="UTF-8"?> | ||
2 | -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
3 | - <modelVersion>4.0.0</modelVersion> | ||
4 | - <artifactId>demoiselle-ws-jaxrs</artifactId> | ||
5 | - <packaging>jar</packaging> | ||
6 | - | ||
7 | - <name>Demoiselle Web Service</name> | ||
8 | - <description> | ||
9 | - Demoiselle Web Service | ||
10 | - </description> | ||
11 | - | ||
12 | - <parent> | ||
13 | - <groupId>org.demoiselle.jee</groupId> | ||
14 | - <artifactId>demoiselle-parent</artifactId> | ||
15 | - <version>3.0.0-BETA1-SNAPSHOT</version> | ||
16 | - <relativePath>../demoiselle-parent</relativePath> | ||
17 | - </parent> | ||
18 | - | ||
19 | - <dependencies> | ||
20 | - | ||
21 | - <dependency> | ||
22 | - <groupId>org.demoiselle.jee</groupId> | ||
23 | - <artifactId>demoiselle-core</artifactId> | ||
24 | - </dependency> | ||
25 | - | ||
26 | - <dependency> | ||
27 | - <groupId>javax.ws.rs</groupId> | ||
28 | - <artifactId>javax.ws.rs-api</artifactId> | ||
29 | - </dependency> | ||
30 | - | ||
31 | - <dependency> | ||
32 | - <groupId>javax.json</groupId> | ||
33 | - <artifactId>javax.json-api</artifactId> | ||
34 | - </dependency> | ||
35 | - | ||
36 | - </dependencies> | ||
37 | -</project> |
demoiselle-ws-jaxrs/src/main/java/org/demoiselle/jee/ws/jaxrs/JaxRsFilter.java
@@ -1,59 +0,0 @@ | @@ -1,59 +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; | ||
8 | - | ||
9 | -import java.util.logging.Logger; | ||
10 | -import javax.annotation.PostConstruct; | ||
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; | ||
17 | -import javax.ws.rs.container.ContainerRequestFilter; | ||
18 | -import javax.ws.rs.container.ContainerResponseContext; | ||
19 | -import javax.ws.rs.container.ContainerResponseFilter; | ||
20 | -import javax.ws.rs.container.PreMatching; | ||
21 | -import javax.ws.rs.ext.Provider; | ||
22 | - | ||
23 | -/** | ||
24 | - * | ||
25 | - * @author 70744416353 | ||
26 | - */ | ||
27 | -@Provider | ||
28 | -@PreMatching | ||
29 | -public class JaxRsFilter implements ClientRequestFilter, ClientResponseFilter, ContainerRequestFilter, ContainerResponseFilter { | ||
30 | - | ||
31 | - @Inject | ||
32 | - private Logger LOG; | ||
33 | - | ||
34 | - @Override | ||
35 | - public void filter(ClientRequestContext requestContext) { | ||
36 | - } | ||
37 | - | ||
38 | - @Override | ||
39 | - public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) { | ||
40 | - } | ||
41 | - | ||
42 | - @Override | ||
43 | - public void filter(ContainerRequestContext requestContext) { | ||
44 | - } | ||
45 | - | ||
46 | - @Override | ||
47 | - public void filter(ContainerRequestContext requestContext, ContainerResponseContext response) { | ||
48 | - response.getHeaders().putSingle("Demoiselle", "3.0.0"); | ||
49 | - response.getHeaders().putSingle("Access-Control-Allow-Origin", "*"); | ||
50 | - response.getHeaders().putSingle("Access-Control-Allow-Methods", "OPTIONS, GET, POST, PUT, DELETE"); | ||
51 | - response.getHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type"); | ||
52 | - } | ||
53 | - | ||
54 | - @PostConstruct | ||
55 | - public void init() { | ||
56 | - LOG.info("Demoiselle Module - Rest"); | ||
57 | - } | ||
58 | - | ||
59 | -} |
demoiselle-ws-jaxrs/src/main/java/org/demoiselle/jee/ws/jaxrs/crud/package-info.java
@@ -1,11 +0,0 @@ | @@ -1,11 +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 | -/** | ||
8 | - * Esta pacote tem o objetivo de conter as classes relacionadas aos | ||
9 | - * facilitadores de CRUD do framework Demoiselle. | ||
10 | - */ | ||
11 | -package org.demoiselle.jee.ws.jaxrs.crud; | ||
12 | \ No newline at end of file | 0 | \ No newline at end of file |
demoiselle-ws-jaxrs/src/main/java/org/demoiselle/jee/ws/jaxrs/exception/DemoiselleRESTException.java
@@ -1,41 +0,0 @@ | @@ -1,41 +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.exception; | ||
8 | - | ||
9 | -import java.util.HashMap; | ||
10 | - | ||
11 | -import org.demoiselle.jee.core.exception.DemoiselleException; | ||
12 | - | ||
13 | -public class DemoiselleRESTException extends DemoiselleException { | ||
14 | - | ||
15 | - private static final long serialVersionUID = 519965615171844237L; | ||
16 | - | ||
17 | - private HashMap<String, String> messages = new HashMap<String, String>(); | ||
18 | - | ||
19 | - private int statusCode; | ||
20 | - | ||
21 | - public DemoiselleRESTException() { | ||
22 | - | ||
23 | - } | ||
24 | - | ||
25 | - public DemoiselleRESTException(String string) { | ||
26 | - super(string); | ||
27 | - } | ||
28 | - | ||
29 | - public int getStatusCode() { | ||
30 | - return statusCode; | ||
31 | - } | ||
32 | - | ||
33 | - public void addMessage(String field, String msg) { | ||
34 | - this.statusCode = 422; | ||
35 | - messages.put(field, msg); | ||
36 | - } | ||
37 | - | ||
38 | - public HashMap<String, String> getMessages() { | ||
39 | - return messages; | ||
40 | - } | ||
41 | -} |
demoiselle-ws-jaxrs/src/main/java/org/demoiselle/jee/ws/jaxrs/exception/mapper/GenericExceptionMapper.java
@@ -1,68 +0,0 @@ | @@ -1,68 +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.exception.mapper; | ||
8 | - | ||
9 | -import java.io.PrintWriter; | ||
10 | -import java.io.StringWriter; | ||
11 | -import java.util.HashMap; | ||
12 | - | ||
13 | -import javax.ws.rs.WebApplicationException; | ||
14 | -import javax.ws.rs.core.MediaType; | ||
15 | -import javax.ws.rs.core.Response; | ||
16 | -import javax.ws.rs.ext.ExceptionMapper; | ||
17 | -import javax.ws.rs.ext.Provider; | ||
18 | - | ||
19 | -import org.demoiselle.jee.ws.jaxrs.exception.DemoiselleRESTException; | ||
20 | - | ||
21 | -@Provider | ||
22 | -public class GenericExceptionMapper implements ExceptionMapper<Exception> { | ||
23 | - | ||
24 | - public Response toResponse(Exception ex) { | ||
25 | - | ||
26 | - StringWriter errorStackTrace = new StringWriter(); | ||
27 | - ex.printStackTrace(new PrintWriter(errorStackTrace)); | ||
28 | - | ||
29 | - // Verifica se a exception é de validação de PAYLOAD do REST | ||
30 | - if (ex.getCause() instanceof DemoiselleRESTException) { | ||
31 | - DemoiselleRESTException exDemoiselleREST = (DemoiselleRESTException) ex.getCause(); | ||
32 | - if (!exDemoiselleREST.getMessages().isEmpty()) { | ||
33 | - return Response.status(exDemoiselleREST.getStatusCode()).entity(exDemoiselleREST.getMessages()) | ||
34 | - .type(MediaType.APPLICATION_JSON).build(); | ||
35 | - } | ||
36 | - } | ||
37 | - | ||
38 | - HashMap<String, String> entity = new HashMap<String, String>(); | ||
39 | - | ||
40 | - // No caso de existir message ele mostra a MESSAGE da Exception | ||
41 | - if (ex.getMessage() != null) { | ||
42 | - entity.put("error", ex.getMessage()); | ||
43 | - | ||
44 | - // Pega toda as mensagens da stacktrace | ||
45 | - int level = 1; | ||
46 | - while (ex.getCause() != null) { | ||
47 | - ex = (Exception) ex.getCause(); | ||
48 | - if (!ex.getMessage().isEmpty()) { | ||
49 | - entity.put("inner_cause_" + level, ex.getMessage()); | ||
50 | - } | ||
51 | - level += 1; | ||
52 | - } | ||
53 | - | ||
54 | - // Por padrão retorna SERVER ERROR, mas tenta encontrar o status do RESPONSE se for WebApplicationException | ||
55 | - // http://docs.oracle.com/javaee/7/api/javax/ws/rs/WebApplicationException.html | ||
56 | - int responseCode = Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(); | ||
57 | - if (ex instanceof WebApplicationException) { | ||
58 | - responseCode = ((WebApplicationException)ex).getResponse().getStatus(); | ||
59 | - } | ||
60 | - | ||
61 | - return Response.status(responseCode).entity(entity).type(MediaType.APPLICATION_JSON).build(); | ||
62 | - } | ||
63 | - | ||
64 | - entity.put("error", "Erro interno desconhecido no servidor."); | ||
65 | - return Response.status(500).entity(entity).type(MediaType.APPLICATION_JSON).build(); | ||
66 | - } | ||
67 | - | ||
68 | -} |
demoiselle-ws-jaxrs/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-ws-jaxrs/src/main/java/org/demoiselle/jee/ws/jaxrs/interceptor/ValidatePayloadInterceptor.java
@@ -1,62 +0,0 @@ | @@ -1,62 +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 java.io.Serializable; | ||
10 | -import java.util.HashSet; | ||
11 | -import java.util.Set; | ||
12 | - | ||
13 | -import javax.interceptor.AroundInvoke; | ||
14 | -import javax.interceptor.Interceptor; | ||
15 | -import javax.interceptor.InvocationContext; | ||
16 | -import javax.validation.ConstraintViolation; | ||
17 | -import javax.validation.UnexpectedTypeException; | ||
18 | -import javax.validation.Validation; | ||
19 | -import javax.validation.Validator; | ||
20 | -import javax.validation.ValidatorFactory; | ||
21 | - | ||
22 | -import org.demoiselle.jee.ws.jaxrs.exception.DemoiselleRESTException; | ||
23 | - | ||
24 | -@Interceptor | ||
25 | -@ValidatePayload | ||
26 | -public class ValidatePayloadInterceptor implements Serializable { | ||
27 | - | ||
28 | - private static final long serialVersionUID = 1L; | ||
29 | - | ||
30 | - @AroundInvoke | ||
31 | - public Object manage(final InvocationContext ic) throws Exception { | ||
32 | - DemoiselleRESTException ex = new DemoiselleRESTException(); | ||
33 | - Set<ConstraintViolation<?>> violations = new HashSet<ConstraintViolation<?>>(); | ||
34 | - for (Object params : ic.getParameters()) { | ||
35 | - if (params != null) { | ||
36 | - ValidatorFactory dfv = Validation.buildDefaultValidatorFactory(); | ||
37 | - Validator validator = dfv.getValidator(); | ||
38 | - try { | ||
39 | - violations.addAll(validator.validate(params)); | ||
40 | - for (ConstraintViolation<?> violation : violations) { | ||
41 | - String field = (violation.getRootBeanClass().getSimpleName() + "_" | ||
42 | - + violation.getPropertyPath()).toLowerCase(); | ||
43 | - // GPMessage msg = | ||
44 | - // GPMessage.INVALID_FIELD_P1.setSufix(violation.getConstraintDescriptor() | ||
45 | - // .getAnnotation().annotationType().getSimpleName().toLowerCase()); | ||
46 | - | ||
47 | - ex.addMessage(field, violation.getMessage()); | ||
48 | - } | ||
49 | - } catch (UnexpectedTypeException cause) { | ||
50 | - // GPMessage msg = GPMessage.GENERAL_ERROR_P1; | ||
51 | - // msg.setParam(cause.getMessage()); | ||
52 | - throw new DemoiselleRESTException("ERRO GENERICO -> ALTERAR"); | ||
53 | - } | ||
54 | - } | ||
55 | - } | ||
56 | - | ||
57 | - if (!violations.isEmpty() && !ex.getMessages().isEmpty()) { | ||
58 | - throw ex; | ||
59 | - } | ||
60 | - return ic.proceed(); | ||
61 | - } | ||
62 | -} | ||
63 | \ No newline at end of file | 0 | \ No newline at end of file |
pom.xml
1 | <?xml version="1.0" encoding="UTF-8"?> | 1 | <?xml version="1.0" encoding="UTF-8"?> |
2 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | 2 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
3 | - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
4 | - <modelVersion>4.0.0</modelVersion> | ||
5 | - | ||
6 | - <groupId>org.demoiselle.jee</groupId> | ||
7 | - <artifactId>demoiselle-build</artifactId> | ||
8 | - <packaging>pom</packaging> | ||
9 | - <version>3.0.0-BETA1-SNAPSHOT</version> | ||
10 | - | ||
11 | - <name>Demoiselle Framework</name> | ||
12 | - <description>Framework de integração para Java EE 7 baseado na especificação CDI 1.2 (JSR 346).</description> | ||
13 | - <url>http://demoiselle.io</url> | ||
14 | - | ||
15 | - <licenses> | ||
16 | - <license> | ||
17 | - <name>GNU Lesser General Public License, Version 3</name> | ||
18 | - <url>http://www.gnu.org/licenses/lgpl-3.0.txt</url> | ||
19 | - </license> | ||
20 | - </licenses> | ||
21 | - | ||
22 | - <organization> | ||
23 | - <name>SERPRO - Serviço Federal de Processamento de Dados</name> | ||
24 | - <url>http://www.serpro.gov.br</url> | ||
25 | - </organization> | ||
26 | - | ||
27 | - <developers> | ||
28 | - | ||
29 | - <developer> | ||
30 | - <name>Cassio Maes da Fonseca</name> | ||
31 | - <email>cassiomaes@gmail.com</email> | ||
32 | - <organization>SERPRO</organization> | ||
33 | - <organizationUrl>http://www.serpro.gov.br</organizationUrl> | ||
34 | - </developer> | ||
35 | - | ||
36 | - <developer> | ||
37 | - <name>Clovis Lemes Ferreira Junior</name> | ||
38 | - <email>clovisjunior2009@gmail.com</email> | ||
39 | - <organization>SERPRO</organization> | ||
40 | - <organizationUrl>http://www.serpro.gov.br</organizationUrl> | ||
41 | - </developer> | ||
42 | - | ||
43 | - <developer> | ||
44 | - <name>Julian Cesar dos Santos</name> | ||
45 | - <email>juliancesar@gmail.com</email> | ||
46 | - <organization>SERPRO</organization> | ||
47 | - <organizationUrl>http://www.serpro.gov.br</organizationUrl> | ||
48 | - </developer> | ||
49 | - | ||
50 | - <developer> | ||
51 | - <name>Paulo Gladson Ximenes Pinheiro</name> | ||
52 | - <email>paulopinheiro777@gmail.com</email> | ||
53 | - <organization>SERPRO</organization> | ||
54 | - <organizationUrl>http://www.serpro.gov.br</organizationUrl> | ||
55 | - </developer> | ||
56 | - | ||
57 | - <developer> | ||
58 | - <name>Vanderson Botelho da Silva</name> | ||
59 | - <email>botelhojp@gmail.com</email> | ||
60 | - <organization>SERPRO</organization> | ||
61 | - <organizationUrl>http://www.serpro.gov.br</organizationUrl> | ||
62 | - </developer> | ||
63 | - | ||
64 | - </developers> | 3 | + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
4 | + <modelVersion>4.0.0</modelVersion> | ||
5 | + | ||
6 | + <groupId>org.demoiselle.jee</groupId> | ||
7 | + <artifactId>demoiselle-build</artifactId> | ||
8 | + <packaging>pom</packaging> | ||
9 | + <version>3.0.0-BETA1-SNAPSHOT</version> | ||
10 | + | ||
11 | + <name>Demoiselle Framework</name> | ||
12 | + <description>Framework de integração para Java EE 7 baseado na especificação CDI 1.2 (JSR 346).</description> | ||
13 | + <url>http://demoiselle.io</url> | ||
14 | + | ||
15 | + <licenses> | ||
16 | + <license> | ||
17 | + <name>GNU Lesser General Public License, Version 3</name> | ||
18 | + <url>http://www.gnu.org/licenses/lgpl-3.0.txt</url> | ||
19 | + </license> | ||
20 | + </licenses> | ||
21 | + | ||
22 | + <organization> | ||
23 | + <name>SERPRO - Serviço Federal de Processamento de Dados</name> | ||
24 | + <url>http://www.serpro.gov.br</url> | ||
25 | + </organization> | ||
26 | + | ||
27 | + <developers> | ||
28 | + | ||
29 | + <developer> | ||
30 | + <name>Cassio Maes da Fonseca</name> | ||
31 | + <email>cassiomaes@gmail.com</email> | ||
32 | + <organization>SERPRO</organization> | ||
33 | + <organizationUrl>http://www.serpro.gov.br</organizationUrl> | ||
34 | + </developer> | ||
35 | + | ||
36 | + <developer> | ||
37 | + <name>Clovis Lemes Ferreira Junior</name> | ||
38 | + <email>clovisjunior2009@gmail.com</email> | ||
39 | + <organization>SERPRO</organization> | ||
40 | + <organizationUrl>http://www.serpro.gov.br</organizationUrl> | ||
41 | + </developer> | ||
42 | + | ||
43 | + <developer> | ||
44 | + <name>Julian Cesar dos Santos</name> | ||
45 | + <email>juliancesar@gmail.com</email> | ||
46 | + <organization>SERPRO</organization> | ||
47 | + <organizationUrl>http://www.serpro.gov.br</organizationUrl> | ||
48 | + </developer> | ||
49 | + | ||
50 | + <developer> | ||
51 | + <name>Paulo Gladson Ximenes Pinheiro</name> | ||
52 | + <email>paulopinheiro777@gmail.com</email> | ||
53 | + <organization>SERPRO</organization> | ||
54 | + <organizationUrl>http://www.serpro.gov.br</organizationUrl> | ||
55 | + </developer> | ||
56 | + | ||
57 | + <developer> | ||
58 | + <name>Vanderson Botelho da Silva</name> | ||
59 | + <email>botelhojp@gmail.com</email> | ||
60 | + <organization>SERPRO</organization> | ||
61 | + <organizationUrl>http://www.serpro.gov.br</organizationUrl> | ||
62 | + </developer> | ||
63 | + | ||
64 | + </developers> | ||
65 | 65 | ||
66 | - <modules> | ||
67 | - <module>demoiselle-parent</module> | ||
68 | - <module>demoiselle-core</module> | ||
69 | - <module>demoiselle-persistence-jpa</module> | ||
70 | - <module>demoiselle-security</module> | ||
71 | - <module>demoiselle-ws-jaxrs</module> | ||
72 | - </modules> | ||
73 | - | ||
74 | - <properties> | ||
75 | - <project.alias>framework</project.alias> | ||
76 | - <java.version>1.8</java.version> | ||
77 | - <maven.compiler.source>1.8</maven.compiler.source> | ||
78 | - <maven.compiler.target>1.8</maven.compiler.target> | ||
79 | - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||
80 | - </properties> | 66 | + <modules> |
67 | + <module>demoiselle-parent</module> | ||
68 | + <module>demoiselle-core</module> | ||
69 | + <module>demoiselle-persistence-jpa</module> | ||
70 | + <module>demoiselle-rest</module> | ||
71 | + <module>demoiselle-security</module> | ||
72 | + <module>demoiselle-security-basic</module> | ||
73 | + <!--<module>demoiselle-security-jwt</module>--> | ||
74 | + </modules> | ||
75 | + | ||
76 | + <properties> | ||
77 | + <project.alias>framework</project.alias> | ||
78 | + <java.version>1.8</java.version> | ||
79 | + <maven.compiler.source>1.8</maven.compiler.source> | ||
80 | + <maven.compiler.target>1.8</maven.compiler.target> | ||
81 | + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||
82 | + </properties> | ||
81 | 83 | ||
82 | - <build> | ||
83 | - <plugins> | ||
84 | - <plugin> | ||
85 | - <groupId>org.apache.maven.plugins</groupId> | ||
86 | - <artifactId>maven-assembly-plugin</artifactId> | ||
87 | - <version>2.6</version> | ||
88 | - </plugin> | ||
89 | - | ||
90 | - <plugin> | ||
91 | - <groupId>org.apache.maven.plugins</groupId> | ||
92 | - <artifactId>maven-deploy-plugin</artifactId> | ||
93 | - <version>2.8.2</version> | ||
94 | - </plugin> | 84 | + <build> |
85 | + <plugins> | ||
86 | + <plugin> | ||
87 | + <groupId>org.apache.maven.plugins</groupId> | ||
88 | + <artifactId>maven-assembly-plugin</artifactId> | ||
89 | + <version>2.6</version> | ||
90 | + </plugin> | ||
91 | + | ||
92 | + <plugin> | ||
93 | + <groupId>org.apache.maven.plugins</groupId> | ||
94 | + <artifactId>maven-deploy-plugin</artifactId> | ||
95 | + <version>2.8.2</version> | ||
96 | + </plugin> | ||
95 | 97 | ||
96 | - <plugin> | ||
97 | - <groupId>org.apache.maven.plugins</groupId> | ||
98 | - <artifactId>maven-source-plugin</artifactId> | ||
99 | - <version>2.2.1</version> | ||
100 | - <executions> | ||
101 | - <execution> | ||
102 | - <id>attach-sources</id> | ||
103 | - <goals> | ||
104 | - <goal>jar-no-fork</goal> | ||
105 | - </goals> | ||
106 | - </execution> | ||
107 | - </executions> | ||
108 | - </plugin> | ||
109 | -<!-- | ||
110 | - <plugin> | ||
111 | - <groupId>org.apache.maven.plugins</groupId> | ||
112 | - <artifactId>maven-javadoc-plugin</artifactId> | ||
113 | - <version>2.9.1</version> | ||
114 | - <executions> | ||
115 | - <execution> | ||
116 | - <id>attach-javadocs</id> | ||
117 | - <goals> | ||
118 | - <goal>jar</goal> | ||
119 | - </goals> | ||
120 | - </execution> | ||
121 | - </executions> | ||
122 | - </plugin> | ||
123 | - --> | ||
124 | - <plugin> | ||
125 | - <groupId>org.apache.maven.plugins</groupId> | ||
126 | - <artifactId>maven-gpg-plugin</artifactId> | ||
127 | - <version>1.5</version> | ||
128 | - <executions> | ||
129 | - <execution> | ||
130 | - <id>sign-artifacts</id> | ||
131 | - <phase>verify</phase> | ||
132 | - <goals> | ||
133 | - <goal>sign</goal> | ||
134 | - </goals> | ||
135 | - </execution> | ||
136 | - </executions> | ||
137 | - </plugin> | ||
138 | - | ||
139 | - <plugin> | ||
140 | - <groupId>org.sonatype.plugins</groupId> | ||
141 | - <artifactId>nexus-staging-maven-plugin</artifactId> | ||
142 | - <version>1.6.3</version> | ||
143 | - <extensions>true</extensions> | ||
144 | - <configuration> | ||
145 | - <serverId>sonatype-nexus-staging</serverId> | ||
146 | - <nexusUrl>https://oss.sonatype.org/</nexusUrl> | ||
147 | - <autoReleaseAfterClose>false</autoReleaseAfterClose> | ||
148 | - </configuration> | ||
149 | - </plugin> | ||
150 | - | ||
151 | - <plugin> | ||
152 | - <groupId>org.apache.maven.plugins</groupId> | ||
153 | - <artifactId>maven-release-plugin</artifactId> | ||
154 | - <version>2.5</version> | ||
155 | - <configuration> | ||
156 | - <autoVersionSubmodules>true</autoVersionSubmodules> | ||
157 | - <useReleaseProfile>false</useReleaseProfile> | ||
158 | - <releaseProfiles>release</releaseProfiles> | ||
159 | - <goals>deploy</goals> | ||
160 | - </configuration> | ||
161 | - </plugin> | ||
162 | - </plugins> | ||
163 | - | ||
164 | - </build> | ||
165 | - | ||
166 | - <scm> | ||
167 | - <connection>scm:git:git@github.com:demoiselle/${project.alias}.git</connection> | ||
168 | - <developerConnection>scm:git:git@github.com:demoiselle/${project.alias}.git</developerConnection> | ||
169 | - <url>http://github.com/demoiselle/${project.alias}</url> | ||
170 | - <tag>HEAD</tag> | ||
171 | - </scm> | ||
172 | - | ||
173 | - <distributionManagement> | ||
174 | - <site> | ||
175 | - <id>demoiselle.sourceforge.net</id> | ||
176 | - <url>${site.url}</url> | ||
177 | - </site> | ||
178 | - | ||
179 | - <snapshotRepository> | ||
180 | - <id>sonatype-nexus-snapshots</id> | ||
181 | - <url>https://oss.sonatype.org/content/repositories/snapshots</url> | ||
182 | - </snapshotRepository> | ||
183 | - | ||
184 | - <repository> | ||
185 | - <id>sonatype-nexus-staging</id> | ||
186 | - <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url> | ||
187 | - </repository> | ||
188 | - </distributionManagement> | ||
189 | - | ||
190 | - <repositories> | ||
191 | - <repository> | ||
192 | - <id>sonatype-nexus-snapshots</id> | ||
193 | - <name>Sonatype Nexus Snapshots</name> | ||
194 | - <url>https://oss.sonatype.org/content/repositories/snapshots</url> | ||
195 | - <snapshots> | ||
196 | - <enabled>true</enabled> | ||
197 | - </snapshots> | ||
198 | - <releases> | ||
199 | - <enabled>false</enabled> | ||
200 | - </releases> | ||
201 | - </repository> | ||
202 | - | ||
203 | - <repository> | ||
204 | - <id>sonatype-nexus-releases</id> | ||
205 | - <name>Sonatype Nexus Releases</name> | ||
206 | - <url>https://oss.sonatype.org/content/repositories/releases</url> | ||
207 | - <snapshots> | ||
208 | - <enabled>false</enabled> | ||
209 | - </snapshots> | ||
210 | - <releases> | ||
211 | - <enabled>true</enabled> | ||
212 | - </releases> | ||
213 | - </repository> | ||
214 | - </repositories> | 98 | + <plugin> |
99 | + <groupId>org.apache.maven.plugins</groupId> | ||
100 | + <artifactId>maven-source-plugin</artifactId> | ||
101 | + <version>2.2.1</version> | ||
102 | + <executions> | ||
103 | + <execution> | ||
104 | + <id>attach-sources</id> | ||
105 | + <goals> | ||
106 | + <goal>jar-no-fork</goal> | ||
107 | + </goals> | ||
108 | + </execution> | ||
109 | + </executions> | ||
110 | + </plugin> | ||
111 | + <!-- | ||
112 | + <plugin> | ||
113 | + <groupId>org.apache.maven.plugins</groupId> | ||
114 | + <artifactId>maven-javadoc-plugin</artifactId> | ||
115 | + <version>2.9.1</version> | ||
116 | + <executions> | ||
117 | + <execution> | ||
118 | + <id>attach-javadocs</id> | ||
119 | + <goals> | ||
120 | + <goal>jar</goal> | ||
121 | + </goals> | ||
122 | + </execution> | ||
123 | + </executions> | ||
124 | + </plugin> | ||
125 | + --> | ||
126 | + <!-- <plugin> | ||
127 | + <groupId>org.apache.maven.plugins</groupId> | ||
128 | + <artifactId>maven-gpg-plugin</artifactId> | ||
129 | + <version>1.5</version> | ||
130 | + <executions> | ||
131 | + <execution> | ||
132 | + <id>sign-artifacts</id> | ||
133 | + <phase>verify</phase> | ||
134 | + <goals> | ||
135 | + <goal>sign</goal> | ||
136 | + </goals> | ||
137 | + </execution> | ||
138 | + </executions> | ||
139 | + </plugin>--> | ||
140 | + | ||
141 | + <plugin> | ||
142 | + <groupId>org.sonatype.plugins</groupId> | ||
143 | + <artifactId>nexus-staging-maven-plugin</artifactId> | ||
144 | + <version>1.6.3</version> | ||
145 | + <extensions>true</extensions> | ||
146 | + <configuration> | ||
147 | + <serverId>sonatype-nexus-staging</serverId> | ||
148 | + <nexusUrl>https://oss.sonatype.org/</nexusUrl> | ||
149 | + <autoReleaseAfterClose>false</autoReleaseAfterClose> | ||
150 | + </configuration> | ||
151 | + </plugin> | ||
152 | + | ||
153 | + <plugin> | ||
154 | + <groupId>org.apache.maven.plugins</groupId> | ||
155 | + <artifactId>maven-release-plugin</artifactId> | ||
156 | + <version>2.5</version> | ||
157 | + <configuration> | ||
158 | + <autoVersionSubmodules>true</autoVersionSubmodules> | ||
159 | + <useReleaseProfile>false</useReleaseProfile> | ||
160 | + <releaseProfiles>release</releaseProfiles> | ||
161 | + <goals>deploy</goals> | ||
162 | + </configuration> | ||
163 | + </plugin> | ||
164 | + </plugins> | ||
165 | + | ||
166 | + </build> | ||
167 | + | ||
168 | + <scm> | ||
169 | + <connection>scm:git:git@github.com:demoiselle/${project.alias}.git</connection> | ||
170 | + <developerConnection>scm:git:git@github.com:demoiselle/${project.alias}.git</developerConnection> | ||
171 | + <url>http://github.com/demoiselle/${project.alias}</url> | ||
172 | + <tag>HEAD</tag> | ||
173 | + </scm> | ||
174 | + | ||
175 | + <distributionManagement> | ||
176 | + <site> | ||
177 | + <id>demoiselle.sourceforge.net</id> | ||
178 | + <url>${site.url}</url> | ||
179 | + </site> | ||
180 | + | ||
181 | + <snapshotRepository> | ||
182 | + <id>sonatype-nexus-snapshots</id> | ||
183 | + <url>https://oss.sonatype.org/content/repositories/snapshots</url> | ||
184 | + </snapshotRepository> | ||
185 | + | ||
186 | + <repository> | ||
187 | + <id>sonatype-nexus-staging</id> | ||
188 | + <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url> | ||
189 | + </repository> | ||
190 | + </distributionManagement> | ||
191 | + | ||
192 | + <repositories> | ||
193 | + <repository> | ||
194 | + <id>sonatype-nexus-snapshots</id> | ||
195 | + <name>Sonatype Nexus Snapshots</name> | ||
196 | + <url>https://oss.sonatype.org/content/repositories/snapshots</url> | ||
197 | + <snapshots> | ||
198 | + <enabled>true</enabled> | ||
199 | + </snapshots> | ||
200 | + <releases> | ||
201 | + <enabled>false</enabled> | ||
202 | + </releases> | ||
203 | + </repository> | ||
204 | + | ||
205 | + <repository> | ||
206 | + <id>sonatype-nexus-releases</id> | ||
207 | + <name>Sonatype Nexus Releases</name> | ||
208 | + <url>https://oss.sonatype.org/content/repositories/releases</url> | ||
209 | + <snapshots> | ||
210 | + <enabled>false</enabled> | ||
211 | + </snapshots> | ||
212 | + <releases> | ||
213 | + <enabled>true</enabled> | ||
214 | + </releases> | ||
215 | + </repository> | ||
216 | + </repositories> | ||
215 | 217 | ||
216 | </project> | 218 | </project> |