Commit 3d167b5459087b0a6bb02955faa28bfbcc8d655a

Authored by PauloGladson
1 parent de2b8e57

Segurança e ajustes nos pacotes

Showing 31 changed files with 320 additions and 231 deletions   Show diff stats
demoiselle-core/src/main/java/org/demoiselle/jee/core/annotation/Ignore.java
... ... @@ -7,9 +7,8 @@
7 7 package org.demoiselle.jee.core.annotation;
8 8  
9 9 import static java.lang.annotation.ElementType.FIELD;
10   -import static java.lang.annotation.RetentionPolicy.RUNTIME;
11   -
12 10 import java.lang.annotation.Retention;
  11 +import static java.lang.annotation.RetentionPolicy.RUNTIME;
13 12 import java.lang.annotation.Target;
14 13  
15 14 /**
... ...
demoiselle-core/src/main/java/org/demoiselle/jee/core/annotation/Name.java
... ... @@ -6,16 +6,14 @@
6 6 */
7 7 package org.demoiselle.jee.core.annotation;
8 8  
9   -import javax.enterprise.inject.spi.InjectionPoint;
10   -import javax.enterprise.util.Nonbinding;
11   -import javax.inject.Named;
12   -import javax.inject.Qualifier;
  9 +import static java.lang.annotation.ElementType.*;
13 10 import java.lang.annotation.Inherited;
14 11 import java.lang.annotation.Retention;
15   -import java.lang.annotation.Target;
16   -
17   -import static java.lang.annotation.ElementType.*;
18 12 import static java.lang.annotation.RetentionPolicy.RUNTIME;
  13 +import java.lang.annotation.Target;
  14 +import javax.enterprise.util.Nonbinding;
  15 +import javax.inject.Named;
  16 +import javax.inject.Qualifier;
19 17  
20 18 /**
21 19 * <p>
... ...
demoiselle-core/src/main/java/org/demoiselle/jee/core/annotation/Priority.java
... ... @@ -6,12 +6,11 @@
6 6 */
7 7 package org.demoiselle.jee.core.annotation;
8 8  
9   -import java.lang.annotation.Retention;
10   -import java.lang.annotation.Target;
11   -
12 9 import static java.lang.annotation.ElementType.METHOD;
13 10 import static java.lang.annotation.ElementType.TYPE;
  11 +import java.lang.annotation.Retention;
14 12 import static java.lang.annotation.RetentionPolicy.RUNTIME;
  13 +import java.lang.annotation.Target;
15 14  
16 15 /**
17 16 * <p>
... ...
demoiselle-core/src/main/java/org/demoiselle/jee/core/annotation/literal/NameQualifier.java
... ... @@ -6,9 +6,8 @@
6 6 */
7 7 package org.demoiselle.jee.core.annotation.literal;
8 8  
9   -import org.demoiselle.jee.core.annotation.Name;
10   -
11 9 import javax.enterprise.util.AnnotationLiteral;
  10 +import org.demoiselle.jee.core.annotation.Name;
12 11  
13 12 /**
14 13 * Annotation litteral that allows to create instances of the {@link Name} literal. The created instance can then be
... ...
demoiselle-core/src/main/java/org/demoiselle/jee/core/annotation/literal/NamedQualifier.java
... ... @@ -6,9 +6,9 @@
6 6 */
7 7 package org.demoiselle.jee.core.annotation.literal;
8 8  
  9 +import java.lang.annotation.Annotation;
9 10 import javax.enterprise.util.AnnotationLiteral;
10 11 import javax.inject.Named;
11   -import java.lang.annotation.Annotation;
12 12  
13 13 /**
14 14 * Annotation litteral that allows to create instances of the {@link Named} literal.
... ...
demoiselle-core/src/main/java/org/demoiselle/jee/core/interfaces/security/SecurityContext.java
... ... @@ -7,9 +7,6 @@
7 7 package org.demoiselle.jee.core.interfaces.security;
8 8  
9 9 import java.io.Serializable;
10   -import java.security.Principal;
11   -import java.util.List;
12   -import java.util.Map;
13 10  
14 11 /**
15 12 * <p>
... ...
demoiselle-core/src/main/java/org/demoiselle/jee/core/interfaces/security/TokensManager.java
... ... @@ -7,9 +7,6 @@
7 7 package org.demoiselle.jee.core.interfaces.security;
8 8  
9 9 import java.io.Serializable;
10   -import java.security.Principal;
11   -import java.util.List;
12   -import java.util.Map;
13 10  
14 11 /**
15 12 * <p>
... ...
demoiselle-core/src/main/java/org/demoiselle/jee/core/internal/producer/LoggerProducer.java
... ... @@ -8,6 +8,7 @@ package org.demoiselle.jee.core.internal.producer;
8 8  
9 9 import java.io.Serializable;
10 10 import java.util.logging.Logger;
  11 +import static java.util.logging.Logger.getLogger;
11 12 import javax.enterprise.context.Dependent;
12 13 import javax.enterprise.inject.Default;
13 14 import javax.enterprise.inject.Produces;
... ... @@ -40,7 +41,7 @@ public class LoggerProducer implements Serializable {
40 41 name = "not.categorized";
41 42 }
42 43  
43   - return Logger.getLogger(name);
  44 + return getLogger(name);
44 45 }
45 46  
46 47 }
... ...
demoiselle-core/src/main/java/org/demoiselle/jee/core/internal/producer/ResourceBundleProducer.java
... ... @@ -8,15 +8,14 @@ package org.demoiselle.jee.core.internal.producer;
8 8  
9 9 import java.io.Serializable;
10 10 import java.util.Locale;
11   -
  11 +import static java.util.Locale.getDefault;
12 12 import javax.enterprise.context.Dependent;
13 13 import javax.enterprise.inject.Default;
14 14 import javax.enterprise.inject.Produces;
15   -import javax.enterprise.inject.spi.CDI;
  15 +import static javax.enterprise.inject.spi.CDI.current;
16 16 import javax.enterprise.inject.spi.InjectionPoint;
17   -
18 17 import org.demoiselle.jee.core.annotation.Name;
19   -import org.demoiselle.jee.core.util.CDIUtils;
  18 +import static org.demoiselle.jee.core.util.CDIUtils.getQualifier;
20 19 import org.demoiselle.jee.core.util.ResourceBundle;
21 20  
22 21 /**
... ... @@ -44,7 +43,7 @@ public class ResourceBundleProducer implements Serializable {
44 43 public ResourceBundle create(InjectionPoint ip) {
45 44 String baseName = null;
46 45 if (ip != null && ip.getQualifiers() != null) {
47   - Name nameQualifier = CDIUtils.getQualifier(Name.class, ip);
  46 + Name nameQualifier = getQualifier(Name.class, ip);
48 47 if (nameQualifier != null) {
49 48 baseName = nameQualifier.value();
50 49 if ("".equals(baseName)) {
... ... @@ -62,13 +61,13 @@ public class ResourceBundleProducer implements Serializable {
62 61  
63 62 try {
64 63 bundle = baseName != null
65   - ? new ResourceBundle(baseName, CDI.current().select(Locale.class).get()) {
  64 + ? new ResourceBundle(baseName, current().select(Locale.class).get()) {
66 65 }
67   - : new ResourceBundle("messages", CDI.current().select(Locale.class).get());
  66 + : new ResourceBundle("messages", current().select(Locale.class).get());
68 67 } catch (RuntimeException e) {
69 68 bundle = baseName != null
70   - ? new ResourceBundle(baseName, Locale.getDefault())
71   - : new ResourceBundle("messages", Locale.getDefault());
  69 + ? new ResourceBundle(baseName, getDefault())
  70 + : new ResourceBundle("messages", getDefault());
72 71 }
73 72  
74 73 return bundle;
... ...
demoiselle-core/src/main/java/org/demoiselle/jee/core/lifecycle/LifecycleAnnotation.java
... ... @@ -9,9 +9,8 @@ package org.demoiselle.jee.core.lifecycle;
9 9 import java.lang.annotation.ElementType;
10 10 import java.lang.annotation.Inherited;
11 11 import java.lang.annotation.Retention;
12   -import java.lang.annotation.Target;
13   -
14 12 import static java.lang.annotation.RetentionPolicy.RUNTIME;
  13 +import java.lang.annotation.Target;
15 14  
16 15 /**
17 16 * Annotate other annotations with this one to
... ...
demoiselle-core/src/main/java/org/demoiselle/jee/core/util/CDIUtils.java
... ... @@ -8,7 +8,6 @@ package org.demoiselle.jee.core.util;
8 8  
9 9 import java.lang.annotation.Annotation;
10 10 import java.util.Collection;
11   -
12 11 import javax.enterprise.inject.spi.InjectionPoint;
13 12  
14 13 /**
... ...
demoiselle-core/src/main/java/org/demoiselle/jee/core/util/Reflections.java
... ... @@ -7,11 +7,14 @@
7 7 package org.demoiselle.jee.core.util;
8 8  
9 9 import java.io.InputStream;
  10 +import static java.lang.Thread.currentThread;
10 11 import java.lang.reflect.*;
  12 +import static java.lang.reflect.Modifier.isStatic;
11 13 import java.net.URL;
12 14 import java.util.ArrayList;
13   -import java.util.Arrays;
  15 +import static java.util.Arrays.asList;
14 16 import java.util.List;
  17 +import static org.demoiselle.jee.core.util.Exceptions.handleToRuntimeException;
15 18  
16 19 /**
17 20 * Provides some features to do some operations relating to java reflection.
... ... @@ -171,7 +174,7 @@ public class Reflections {
171 174 field.setAccessible(acessible);
172 175  
173 176 } catch (Exception e) {
174   - Exceptions.handleToRuntimeException(e);
  177 + handleToRuntimeException(e);
175 178 }
176 179  
177 180 return result;
... ... @@ -192,7 +195,7 @@ public class Reflections {
192 195 field.setAccessible(acessible);
193 196  
194 197 } catch (Exception e) {
195   - Exceptions.handleToRuntimeException(e);
  198 + handleToRuntimeException(e);
196 199 }
197 200 }
198 201  
... ... @@ -202,11 +205,11 @@ public class Reflections {
202 205 * inherited fields you must iterate over this type's hierarchy.
203 206 */
204 207 public static Field[] getNonStaticDeclaredFields(Class<?> type) {
205   - List<Field> fields = new ArrayList<Field>();
  208 + List<Field> fields = new ArrayList<>();
206 209  
207 210 if (type != null) {
208 211 for (Field field : type.getDeclaredFields()) {
209   - if (!Modifier.isStatic(field.getModifiers()) && !field.getType().equals(type.getDeclaringClass())) {
  212 + if (!isStatic(field.getModifiers()) && !field.getType().equals(type.getDeclaringClass())) {
210 213 fields.add(field);
211 214 }
212 215 }
... ... @@ -220,12 +223,12 @@ public class Reflections {
220 223 * @return All non static fields from a certain type, including fields declared in superclasses of this type.
221 224 */
222 225 public static List<Field> getNonStaticFields(Class<?> type) {
223   - List<Field> fields = new ArrayList<Field>();
  226 + List<Field> fields = new ArrayList<>();
224 227  
225 228 if (type != null) {
226 229 Class<?> currentType = type;
227 230 while (currentType != null && !"java.lang.Object".equals(currentType.getCanonicalName())) {
228   - fields.addAll(Arrays.asList(getNonStaticDeclaredFields(currentType)));
  231 + fields.addAll(asList(getNonStaticDeclaredFields(currentType)));
229 232 currentType = currentType.getSuperclass();
230 233 }
231 234 }
... ... @@ -245,7 +248,7 @@ public class Reflections {
245 248 try {
246 249 object = clazz.newInstance();
247 250 } catch (InstantiationException | IllegalAccessException e) {
248   - Exceptions.handleToRuntimeException(e);
  251 + handleToRuntimeException(e);
249 252 }
250 253 return object;
251 254 }
... ... @@ -268,7 +271,7 @@ public class Reflections {
268 271 * @return {@link ClassLoader} ClassLoader for the given class.
269 272 */
270 273 public static ClassLoader getClassLoaderForClass(final String canonicalName) {
271   - return Reflections.getClassLoaderForResource(canonicalName.replaceAll("\.", "/") + ".class");
  274 + return getClassLoaderForResource(canonicalName.replaceAll("\.", "/") + ".class");
272 275 }
273 276  
274 277 /**
... ... @@ -281,7 +284,7 @@ public class Reflections {
281 284 final String stripped = resource.charAt(0) == '/' ? resource.substring(1) : resource;
282 285  
283 286 URL url = null;
284   - ClassLoader result = Thread.currentThread().getContextClassLoader();
  287 + ClassLoader result = currentThread().getContextClassLoader();
285 288  
286 289 if (result != null) {
287 290 url = result.getResource(stripped);
... ...
demoiselle-core/src/main/java/org/demoiselle/jee/core/util/ResourceBundle.java
... ... @@ -7,6 +7,7 @@
7 7 package org.demoiselle.jee.core.util;
8 8  
9 9 import java.io.Serializable;
  10 +import static java.lang.Thread.currentThread;
10 11 import java.lang.reflect.Method;
11 12 import java.util.Enumeration;
12 13 import java.util.Locale;
... ... @@ -37,11 +38,11 @@ public class ResourceBundle extends java.util.ResourceBundle implements Serializ
37 38 private java.util.ResourceBundle getDelegate() {
38 39 if (delegate == null) {
39 40 try {
40   - ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
41   - delegate = ResourceBundle.getBundle(baseName, locale, classLoader);
  41 + ClassLoader classLoader = currentThread().getContextClassLoader();
  42 + delegate = getBundle(baseName, locale, classLoader);
42 43  
43 44 } catch (MissingResourceException mre) {
44   - delegate = ResourceBundle.getBundle(baseName, locale);
  45 + delegate = getBundle(baseName, locale);
45 46 }
46 47 }
47 48  
... ...
demoiselle-core/src/main/java/org/demoiselle/jee/core/util/Strings.java
... ... @@ -10,12 +10,14 @@ import java.io.BufferedReader;
10 10 import java.io.IOException;
11 11 import java.io.InputStream;
12 12 import java.io.InputStreamReader;
  13 +import static java.lang.String.valueOf;
13 14 import java.lang.reflect.Field;
14 15 import java.util.Arrays;
15   -import java.util.regex.Matcher;
16   -import java.util.regex.Pattern;
17   -
  16 +import static java.util.regex.Matcher.quoteReplacement;
  17 +import static java.util.regex.Pattern.matches;
18 18 import org.demoiselle.jee.core.annotation.Ignore;
  19 +import static org.demoiselle.jee.core.util.Reflections.getFieldValue;
  20 +import static org.demoiselle.jee.core.util.Reflections.getNonStaticDeclaredFields;
19 21  
20 22 /**
21 23 * Contain a set of methods that implements a set of functionalities that
... ... @@ -36,7 +38,7 @@ public final class Strings {
36 38 * @return boolean true if matches and false otherwise.
37 39 */
38 40 public static boolean isResourceBundleKeyFormat(final String key) {
39   - return Pattern.matches("^\{(.+)\}$", key == null ? "" : key);
  41 + return matches("^\{(.+)\}$", key == null ? "" : key);
40 42 }
41 43  
42 44 /**
... ... @@ -51,7 +53,7 @@ public final class Strings {
51 53  
52 54 if (result != null) {
53 55 for (char ch : chars) {
54   - result = result.replace(String.valueOf(ch), "");
  56 + result = result.replace(valueOf(ch), "");
55 57 }
56 58 }
57 59 return result;
... ... @@ -122,7 +124,7 @@ public final class Strings {
122 124 if (params != null && string != null) {
123 125 for (int i = 0; i < params.length; i++) {
124 126 if (params[i] != null) {
125   - result = result.replaceAll("\\{" + i + "\\}", Matcher.quoteReplacement(params[i].toString()));
  127 + result = result.replaceAll("\\{" + i + "\\}", quoteReplacement(params[i].toString()));
126 128 }
127 129 }
128 130 }
... ... @@ -156,7 +158,7 @@ public final class Strings {
156 158 result.append(" [");
157 159  
158 160 boolean first = true;
159   - for (Field field : Reflections.getNonStaticDeclaredFields(object.getClass())) {
  161 + for (Field field : getNonStaticDeclaredFields(object.getClass())) {
160 162 if (!field.isAnnotationPresent(Ignore.class)) {
161 163 if (first) {
162 164 first = false;
... ... @@ -166,7 +168,7 @@ public final class Strings {
166 168  
167 169 result.append(field.getName());
168 170 result.append('=');
169   - fieldValue = Reflections.getFieldValue(field, object);
  171 + fieldValue = getFieldValue(field, object);
170 172 result.append(fieldValue != null && fieldValue.getClass().isArray()
171 173 ? Arrays.toString((Object[]) fieldValue)
172 174 : fieldValue);
... ... @@ -205,7 +207,7 @@ public final class Strings {
205 207 public static String firstToUpper(String string) {
206 208 String result = string;
207 209  
208   - if (!Strings.isEmpty(string)) {
  210 + if (!isEmpty(string)) {
209 211 result = string.toUpperCase().charAt(0) + (string.length() > 1 ? string.substring(1) : "");
210 212 }
211 213  
... ... @@ -248,20 +250,13 @@ public final class Strings {
248 250 StringBuilder result = new StringBuilder();
249 251  
250 252 if (inputStream != null) {
251   - BufferedReader reader = null;
252   -
253   - try {
254   - reader = new BufferedReader(new InputStreamReader(inputStream));
  253 + try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
255 254 String line;
256 255  
257 256 while ((line = reader.readLine()) != null) {
258 257 result.append(line);
259 258 }
260 259  
261   - } finally {
262   - if (reader != null) {
263   - reader.close();
264   - }
265 260 }
266 261 }
267 262  
... ...
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/exception/DemoiselleRESTException.java
... ... @@ -14,7 +14,7 @@ public class DemoiselleRESTException extends DemoiselleException {
14 14  
15 15 private static final long serialVersionUID = 519965615171844237L;
16 16  
17   - private HashMap<String, String> messages = new HashMap<String, String>();
  17 + private HashMap<String, String> messages = new HashMap<>();
18 18  
19 19 private int statusCode;
20 20  
... ...
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/exception/mapper/GenericExceptionMapper.java
... ... @@ -12,7 +12,13 @@ import java.util.HashMap;
12 12  
13 13 import javax.ws.rs.WebApplicationException;
14 14 import javax.ws.rs.core.MediaType;
  15 +import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
15 16 import javax.ws.rs.core.Response;
  17 +import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR;
  18 +import static javax.ws.rs.core.Response.status;
  19 +import static javax.ws.rs.core.Response.status;
  20 +import static javax.ws.rs.core.Response.status;
  21 +import static javax.ws.rs.core.Response.status;
16 22 import javax.ws.rs.ext.ExceptionMapper;
17 23 import javax.ws.rs.ext.Provider;
18 24  
... ... @@ -30,16 +36,16 @@ public class GenericExceptionMapper implements ExceptionMapper&lt;Exception&gt; {
30 36 if (ex instanceof DemoiselleRESTException) {
31 37 DemoiselleRESTException exDemoiselleREST = (DemoiselleRESTException) ex;
32 38 if (!exDemoiselleREST.getMessages().isEmpty()) {
33   - return Response.status(exDemoiselleREST.getStatusCode()).entity(exDemoiselleREST.getMessages())
34   - .type(MediaType.APPLICATION_JSON).build();
  39 + return status(exDemoiselleREST.getStatusCode()).entity(exDemoiselleREST.getMessages())
  40 + .type(APPLICATION_JSON).build();
35 41 } else if (exDemoiselleREST.getStatusCode() > 0){
36   - return Response.status(exDemoiselleREST.getStatusCode()).entity(exDemoiselleREST.getMessage())
37   - .type(MediaType.APPLICATION_JSON).build();
  42 + return status(exDemoiselleREST.getStatusCode()).entity(exDemoiselleREST.getMessage())
  43 + .type(APPLICATION_JSON).build();
38 44 }
39 45  
40 46 }
41 47  
42   - HashMap<String, String> entity = new HashMap<String, String>();
  48 + HashMap<String, String> entity = new HashMap<>();
43 49  
44 50 // No caso de existir message ele mostra a MESSAGE da Exception
45 51 if (ex.getMessage() != null) {
... ... @@ -57,16 +63,16 @@ public class GenericExceptionMapper implements ExceptionMapper&lt;Exception&gt; {
57 63  
58 64 // Por padrão retorna SERVER ERROR, mas tenta encontrar o status do RESPONSE se for WebApplicationException
59 65 // http://docs.oracle.com/javaee/7/api/javax/ws/rs/WebApplicationException.html
60   - int responseCode = Response.Status.INTERNAL_SERVER_ERROR.getStatusCode();
  66 + int responseCode = INTERNAL_SERVER_ERROR.getStatusCode();
61 67 if (ex instanceof WebApplicationException) {
62 68 responseCode = ((WebApplicationException) ex).getResponse().getStatus();
63 69 }
64 70  
65   - return Response.status(responseCode).entity(entity).type(MediaType.APPLICATION_JSON).build();
  71 + return status(responseCode).entity(entity).type(APPLICATION_JSON).build();
66 72 }
67 73  
68 74 entity.put("error", "Erro interno desconhecido no servidor.");
69   - return Response.status(500).entity(entity).type(MediaType.APPLICATION_JSON).build();
  75 + return status(500).entity(entity).type(APPLICATION_JSON).build();
70 76 }
71 77  
72 78 }
... ...
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/interceptor/ValidatePayloadInterceptor.java
... ... @@ -16,6 +16,7 @@ import javax.interceptor.InvocationContext;
16 16 import javax.validation.ConstraintViolation;
17 17 import javax.validation.UnexpectedTypeException;
18 18 import javax.validation.Validation;
  19 +import static javax.validation.Validation.buildDefaultValidatorFactory;
19 20 import javax.validation.Validator;
20 21 import javax.validation.ValidatorFactory;
21 22  
... ... @@ -30,10 +31,10 @@ public class ValidatePayloadInterceptor implements Serializable {
30 31 @AroundInvoke
31 32 public Object manage(final InvocationContext ic) throws Exception {
32 33 DemoiselleRESTException ex = new DemoiselleRESTException();
33   - Set<ConstraintViolation<?>> violations = new HashSet<ConstraintViolation<?>>();
  34 + Set<ConstraintViolation<?>> violations = new HashSet<>();
34 35 for (Object params : ic.getParameters()) {
35 36 if (params != null) {
36   - ValidatorFactory dfv = Validation.buildDefaultValidatorFactory();
  37 + ValidatorFactory dfv = buildDefaultValidatorFactory();
37 38 Validator validator = dfv.getValidator();
38 39 try {
39 40 violations.addAll(validator.validate(params));
... ...
demoiselle-security-jwt/src/main/java/org/demoiselle/jee/security/jwt/impl/DemoisellePrincipalImpl.java 0 → 100644
... ... @@ -0,0 +1,99 @@
  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.jwt.impl;
  8 +
  9 +import java.util.List;
  10 +import java.util.Map;
  11 +import java.util.Objects;
  12 +import javax.enterprise.context.ApplicationScoped;
  13 +import javax.enterprise.context.Dependent;
  14 +import javax.enterprise.context.RequestScoped;
  15 +import org.demoiselle.jee.core.interfaces.security.DemoisellePrincipal;
  16 +
  17 +/**
  18 + *
  19 + * @author 70744416353
  20 + */
  21 +@RequestScoped
  22 +public class DemoisellePrincipalImpl implements DemoisellePrincipal {
  23 +
  24 + private String id;
  25 + private String name;
  26 + private List<String> roles;
  27 + private Map<String, String> permissions;
  28 +
  29 + @Override
  30 + public String getId() {
  31 + return id;
  32 + }
  33 +
  34 + @Override
  35 + public void setId(String id) {
  36 + this.id = id;
  37 + }
  38 +
  39 + @Override
  40 + public String getName() {
  41 + return name;
  42 + }
  43 +
  44 + @Override
  45 + public void setName(String name) {
  46 + this.name = name;
  47 + }
  48 +
  49 + @Override
  50 + public List<String> getRoles() {
  51 + return roles;
  52 + }
  53 +
  54 + @Override
  55 + public void setRoles(List<String> roles) {
  56 + this.roles = roles;
  57 + }
  58 +
  59 + @Override
  60 + public Map<String, String> getPermissions() {
  61 + return permissions;
  62 + }
  63 +
  64 + @Override
  65 + public void setPermissions(Map<String, String> permissions) {
  66 + this.permissions = permissions;
  67 + }
  68 +
  69 + @Override
  70 + public int hashCode() {
  71 + int hash = 7;
  72 + hash = 37 * hash + Objects.hashCode(this.id);
  73 + return hash;
  74 + }
  75 +
  76 + @Override
  77 + public boolean equals(Object obj) {
  78 + if (this == obj) {
  79 + return true;
  80 + }
  81 + if (obj == null) {
  82 + return false;
  83 + }
  84 + if (getClass() != obj.getClass()) {
  85 + return false;
  86 + }
  87 + final DemoisellePrincipalImpl other = (DemoisellePrincipalImpl) obj;
  88 + if (!Objects.equals(this.id, other.id)) {
  89 + return false;
  90 + }
  91 + return true;
  92 + }
  93 +
  94 + @Override
  95 + public String toString() {
  96 + return "DemoisellePrincipal{" + "id=" + id + ", name=" + name + ", roles=" + roles + ", permissions=" + permissions + '}';
  97 + }
  98 +
  99 +}
... ...
demoiselle-security-jwt/src/main/java/org/demoiselle/jee/security/jwt/impl/TokensManagerImpl.java
... ... @@ -15,9 +15,12 @@ import javax.servlet.http.HttpServletRequest;
15 15 import org.demoiselle.jee.core.interfaces.security.DemoisellePrincipal;
16 16 import org.demoiselle.jee.core.interfaces.security.Token;
17 17 import org.demoiselle.jee.core.interfaces.security.TokensManager;
  18 +import static org.jose4j.jwk.PublicJsonWebKey.Factory.newPublicJwk;
18 19 import org.jose4j.jwk.RsaJsonWebKey;
19 20 import org.jose4j.jwk.RsaJwkGenerator;
  21 +import static org.jose4j.jwk.RsaJwkGenerator.generateJwk;
20 22 import org.jose4j.jws.AlgorithmIdentifiers;
  23 +import static org.jose4j.jws.AlgorithmIdentifiers.HMAC_SHA512;
21 24 import org.jose4j.jws.JsonWebSignature;
22 25 import org.jose4j.jwt.JwtClaims;
23 26 import org.jose4j.jwt.consumer.InvalidJwtException;
... ... @@ -48,8 +51,7 @@ public class TokensManagerImpl implements TokensManager {
48 51  
49 52 public TokensManagerImpl() throws JoseException {
50 53 if (rsaJsonWebKey == null) {
51   -// RsaJsonWebKey chave = RsaJwkGenerator.generateJwk(2048);
52   - rsaJsonWebKey = (RsaJsonWebKey) RsaJsonWebKey.Factory.newPublicJwk(RsaJwkGenerator.generateJwk(2048).getKey());
  54 + rsaJsonWebKey = (RsaJsonWebKey) newPublicJwk(generateJwk(2048).getKey());
53 55 rsaJsonWebKey.setKeyId("demoiselle-security-jwt");
54 56 }
55 57 }
... ... @@ -106,7 +108,7 @@ public class TokensManagerImpl implements TokensManager {
106 108 jws.setPayload(claims.toJson());
107 109 jws.setKey(rsaJsonWebKey.getKey());
108 110 jws.setKeyIdHeaderValue(rsaJsonWebKey.getKeyId());
109   - jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.HMAC_SHA512);
  111 + jws.setAlgorithmHeaderValue(HMAC_SHA512);
110 112 token.setKey(jws.getCompactSerialization());
111 113 token.setType("JWT");
112 114 } catch (JoseException ex) {
... ... @@ -118,7 +120,7 @@ public class TokensManagerImpl implements TokensManager {
118 120  
119 121 @Override
120 122 public boolean validate() {
121   - return getUser() != null;
  123 + return getUser() != null && getUser().getId() != null;
122 124 }
123 125  
124 126 }
... ...
demoiselle-security-token/src/main/java/org/demoiselle/jee/security/token/impl/DemoisellePrincipalImpl.java 0 → 100644
... ... @@ -0,0 +1,97 @@
  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.token.impl;
  8 +
  9 +import java.util.List;
  10 +import java.util.Map;
  11 +import java.util.Objects;
  12 +import javax.enterprise.context.Dependent;
  13 +import org.demoiselle.jee.core.interfaces.security.DemoisellePrincipal;
  14 +
  15 +/**
  16 + *
  17 + * @author 70744416353
  18 + */
  19 +@Dependent
  20 +public class DemoisellePrincipalImpl implements DemoisellePrincipal {
  21 +
  22 + private String id;
  23 + private String name;
  24 + private List<String> roles;
  25 + private Map<String, String> permissions;
  26 +
  27 + @Override
  28 + public String getId() {
  29 + return id;
  30 + }
  31 +
  32 + @Override
  33 + public void setId(String id) {
  34 + this.id = id;
  35 + }
  36 +
  37 + @Override
  38 + public String getName() {
  39 + return name;
  40 + }
  41 +
  42 + @Override
  43 + public void setName(String name) {
  44 + this.name = name;
  45 + }
  46 +
  47 + @Override
  48 + public List<String> getRoles() {
  49 + return roles;
  50 + }
  51 +
  52 + @Override
  53 + public void setRoles(List<String> roles) {
  54 + this.roles = roles;
  55 + }
  56 +
  57 + @Override
  58 + public Map<String, String> getPermissions() {
  59 + return permissions;
  60 + }
  61 +
  62 + @Override
  63 + public void setPermissions(Map<String, String> permissions) {
  64 + this.permissions = permissions;
  65 + }
  66 +
  67 + @Override
  68 + public int hashCode() {
  69 + int hash = 7;
  70 + hash = 37 * hash + Objects.hashCode(this.id);
  71 + return hash;
  72 + }
  73 +
  74 + @Override
  75 + public boolean equals(Object obj) {
  76 + if (this == obj) {
  77 + return true;
  78 + }
  79 + if (obj == null) {
  80 + return false;
  81 + }
  82 + if (getClass() != obj.getClass()) {
  83 + return false;
  84 + }
  85 + final DemoisellePrincipalImpl other = (DemoisellePrincipalImpl) obj;
  86 + if (!Objects.equals(this.id, other.id)) {
  87 + return false;
  88 + }
  89 + return true;
  90 + }
  91 +
  92 + @Override
  93 + public String toString() {
  94 + return "DemoisellePrincipal{" + "id=" + id + ", name=" + name + ", roles=" + roles + ", permissions=" + permissions + '}';
  95 + }
  96 +
  97 +}
... ...
demoiselle-security-token/src/main/java/org/demoiselle/jee/security/token/impl/TokensManagerImpl.java
... ... @@ -5,11 +5,15 @@
5 5 */
6 6 package org.demoiselle.jee.security.token.impl;
7 7  
  8 +import java.util.Map;
8 9 import java.util.UUID;
  10 +import static java.util.UUID.randomUUID;
9 11 import java.util.concurrent.ConcurrentHashMap;
10 12 import java.util.logging.Logger;
  13 +import javax.enterprise.context.ApplicationScoped;
11 14 import javax.enterprise.context.Dependent;
12 15 import javax.inject.Inject;
  16 +import javax.ws.rs.ApplicationPath;
13 17 import org.demoiselle.jee.core.interfaces.security.DemoisellePrincipal;
14 18 import org.demoiselle.jee.core.interfaces.security.Token;
15 19 import org.demoiselle.jee.core.interfaces.security.TokensManager;
... ... @@ -18,10 +22,10 @@ import org.demoiselle.jee.core.interfaces.security.TokensManager;
18 22 *
19 23 * @author 70744416353
20 24 */
21   -@Dependent
  25 +@ApplicationScoped
22 26 public class TokensManagerImpl implements TokensManager {
23 27  
24   - private static ConcurrentHashMap<String, DemoisellePrincipal> repo = new ConcurrentHashMap<>();
  28 + private ConcurrentHashMap<String, DemoisellePrincipal> repo = new ConcurrentHashMap<>();
25 29  
26 30 @Inject
27 31 private Logger logger;
... ... @@ -39,19 +43,24 @@ public class TokensManagerImpl implements TokensManager {
39 43  
40 44 @Override
41 45 public void setUser(DemoisellePrincipal user) {
42   - if (!repo.containsValue(user)) {
43   - String value = UUID.randomUUID().toString();
44   - repo.put(value, user);
  46 + token.setKey(null);
  47 +
  48 + repo.entrySet().stream().parallel().filter((entry) -> (entry.getValue().equals(user))).forEach((entry) -> {
  49 + token.setKey(entry.getKey());
  50 + });
  51 +
  52 + if (token.getKey() == null) {
  53 + String value = randomUUID().toString();
  54 + repo.putIfAbsent(value, user);
45 55 token.setKey(value);
46   - } else {
47   - token.setKey((repo.entrySet().parallelStream().filter((e) -> (user.equals(e.getValue()))).findAny().get()).getKey());
48 56 }
  57 +
49 58 token.setType("Token");
50 59 }
51 60  
52 61 @Override
53 62 public boolean validate() {
54   - return getUser() != null;
  63 + return getUser() != null && getUser().getId() != null;
55 64 }
56 65  
57 66 }
... ...
demoiselle-security/pom.xml
... ... @@ -18,12 +18,7 @@
18 18 </parent>
19 19  
20 20 <dependencies>
21   -
22   - <dependency>
23   - <groupId>org.demoiselle.jee</groupId>
24   - <artifactId>demoiselle-core</artifactId>
25   - </dependency>
26   -
  21 +
27 22 <dependency>
28 23 <groupId>org.demoiselle.jee</groupId>
29 24 <artifactId>demoiselle-rest</artifactId>
... ...
demoiselle-security/src/main/java/org/demoiselle/jee/security/exception/DemoiselleSecurityException.java
... ... @@ -14,7 +14,7 @@ public class DemoiselleSecurityException extends DemoiselleRESTException {
14 14  
15 15 private static final long serialVersionUID = 519965615171844237L;
16 16  
17   - private HashMap<String, String> messages = new HashMap<String, String>();
  17 + private HashMap<String, String> messages = new HashMap<>();
18 18  
19 19 private int statusCode;
20 20  
... ...
demoiselle-security/src/main/java/org/demoiselle/jee/security/impl/DemoisellePrincipalImpl.java
... ... @@ -1,98 +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.impl;
8   -
9   -import java.util.List;
10   -import java.util.Map;
11   -import java.util.Objects;
12   -import javax.enterprise.context.Dependent;
13   -import javax.enterprise.context.RequestScoped;
14   -import org.demoiselle.jee.core.interfaces.security.DemoisellePrincipal;
15   -
16   -/**
17   - *
18   - * @author 70744416353
19   - */
20   -@RequestScoped
21   -public class DemoisellePrincipalImpl implements DemoisellePrincipal {
22   -
23   - private String id;
24   - private String name;
25   - private List<String> roles;
26   - private Map<String, String> permissions;
27   -
28   - @Override
29   - public String getId() {
30   - return id;
31   - }
32   -
33   - @Override
34   - public void setId(String id) {
35   - this.id = id;
36   - }
37   -
38   - @Override
39   - public String getName() {
40   - return name;
41   - }
42   -
43   - @Override
44   - public void setName(String name) {
45   - this.name = name;
46   - }
47   -
48   - @Override
49   - public List<String> getRoles() {
50   - return roles;
51   - }
52   -
53   - @Override
54   - public void setRoles(List<String> roles) {
55   - this.roles = roles;
56   - }
57   -
58   - @Override
59   - public Map<String, String> getPermissions() {
60   - return permissions;
61   - }
62   -
63   - @Override
64   - public void setPermissions(Map<String, String> permissions) {
65   - this.permissions = permissions;
66   - }
67   -
68   - @Override
69   - public int hashCode() {
70   - int hash = 7;
71   - hash = 37 * hash + Objects.hashCode(this.id);
72   - return hash;
73   - }
74   -
75   - @Override
76   - public boolean equals(Object obj) {
77   - if (this == obj) {
78   - return true;
79   - }
80   - if (obj == null) {
81   - return false;
82   - }
83   - if (getClass() != obj.getClass()) {
84   - return false;
85   - }
86   - final DemoisellePrincipalImpl other = (DemoisellePrincipalImpl) obj;
87   - if (!Objects.equals(this.id, other.id)) {
88   - return false;
89   - }
90   - return true;
91   - }
92   -
93   - @Override
94   - public String toString() {
95   - return "DemoisellePrincipal{" + "id=" + id + ", name=" + name + ", roles=" + roles + ", permissions=" + permissions + '}';
96   - }
97   -
98   -}
demoiselle-security/src/main/java/org/demoiselle/jee/security/impl/SecurityContextImpl.java
... ... @@ -6,6 +6,7 @@
6 6 */
7 7 package org.demoiselle.jee.security.impl;
8 8  
  9 +import javax.enterprise.context.ApplicationScoped;
9 10 import javax.enterprise.context.Dependent;
10 11 import javax.enterprise.context.RequestScoped;
11 12 import javax.inject.Inject;
... ... @@ -50,7 +51,7 @@ public class SecurityContextImpl implements SecurityContext {
50 51 */
51 52 @Override
52 53 public boolean hasRole(String role) {
53   - if (tm.getUser().getRoles().parallelStream().filter(p -> p.equals(role)).count() <= 0) {
  54 + if (tm.getUser().getRoles().stream().filter(p -> p.equals(role)).count() <= 0) {
54 55 return false;
55 56 }
56 57 return true;
... ... @@ -61,7 +62,7 @@ public class SecurityContextImpl implements SecurityContext {
61 62 */
62 63 @Override
63 64 public boolean isLoggedIn() {
64   - return getUser() != null && getUser().getId() != null;
  65 + return tm.validate();
65 66 }
66 67  
67 68 @Override
... ...
demoiselle-security/src/main/java/org/demoiselle/jee/security/impl/TokenImpl.java
... ... @@ -5,7 +5,6 @@
5 5 */
6 6 package org.demoiselle.jee.security.impl;
7 7  
8   -import javax.enterprise.context.Dependent;
9 8 import javax.enterprise.context.RequestScoped;
10 9 import org.demoiselle.jee.core.interfaces.security.Token;
11 10  
... ...
demoiselle-security/src/main/java/org/demoiselle/jee/security/interceptor/LoggedInInterceptor.java
... ... @@ -13,7 +13,9 @@ import javax.interceptor.Interceptor;
13 13 import javax.interceptor.InvocationContext;
14 14 import java.io.Serializable;
15 15 import java.util.logging.Logger;
  16 +import static javax.interceptor.Interceptor.Priority.APPLICATION;
16 17 import javax.ws.rs.core.Response;
  18 +import static javax.ws.rs.core.Response.Status.UNAUTHORIZED;
17 19 import org.demoiselle.jee.security.annotation.LoggedIn;
18 20 import org.demoiselle.jee.core.interfaces.security.SecurityContext;
19 21 import org.demoiselle.jee.security.exception.DemoiselleSecurityException;
... ... @@ -28,7 +30,7 @@ import org.demoiselle.jee.security.message.DemoiselleSecurityMessages;
28 30 */
29 31 @LoggedIn
30 32 @Interceptor
31   -@Priority(Interceptor.Priority.APPLICATION)
  33 +@Priority(APPLICATION)
32 34 public class LoggedInInterceptor implements Serializable {
33 35  
34 36 private static final long serialVersionUID = 1L;
... ... @@ -42,7 +44,7 @@ public class LoggedInInterceptor implements Serializable {
42 44 @AroundInvoke
43 45 public Object manage(final InvocationContext ic) throws Exception {
44 46 if (!securityContext.isLoggedIn()) {
45   - throw new DemoiselleSecurityException(bundle.userNotAuthenticated(), Response.Status.UNAUTHORIZED.getStatusCode());
  47 + throw new DemoiselleSecurityException(bundle.userNotAuthenticated(), UNAUTHORIZED.getStatusCode());
46 48 }
47 49 return ic.proceed();
48 50 }
... ...
demoiselle-security/src/main/java/org/demoiselle/jee/security/interceptor/RequiredPermissionInterceptor.java
... ... @@ -13,13 +13,16 @@ import javax.interceptor.InvocationContext;
13 13 import java.io.Serializable;
14 14 import java.util.logging.Logger;
15 15 import javax.inject.Inject;
  16 +import static javax.interceptor.Interceptor.Priority.APPLICATION;
16 17 import javax.ws.rs.core.Response;
  18 +import static javax.ws.rs.core.Response.Status.UNAUTHORIZED;
17 19 import org.demoiselle.jee.core.annotation.Name;
18 20 import org.demoiselle.jee.core.interfaces.security.DemoisellePrincipal;
19 21 import org.demoiselle.jee.core.util.ResourceBundle;
20 22 import org.demoiselle.jee.core.util.Strings;
21 23 import org.demoiselle.jee.security.annotation.RequiredPermission;
22 24 import org.demoiselle.jee.core.interfaces.security.SecurityContext;
  25 +import static org.demoiselle.jee.core.util.Strings.isEmpty;
23 26 import org.demoiselle.jee.security.exception.DemoiselleSecurityException;
24 27 import org.demoiselle.jee.security.message.DemoiselleSecurityMessages;
25 28  
... ... @@ -32,7 +35,7 @@ import org.demoiselle.jee.security.message.DemoiselleSecurityMessages;
32 35 */
33 36 @RequiredPermission
34 37 @Interceptor
35   -@Priority(Interceptor.Priority.APPLICATION)
  38 +@Priority(APPLICATION)
36 39 public class RequiredPermissionInterceptor implements Serializable {
37 40  
38 41 private static final long serialVersionUID = 1L;
... ... @@ -70,19 +73,16 @@ public class RequiredPermissionInterceptor implements Serializable {
70 73 public Object manage(final InvocationContext ic) throws Exception {
71 74 String resource = getResource(ic);
72 75 String operation = getOperation(ic);
73   - String username = null;
74 76  
75 77 if (securityContext.isLoggedIn()) {
76   - username = loggedUser.getName();
77   - logger.finest(bundle.accessCheckingPermission(username, operation, resource));
  78 + logger.finest(bundle.accessCheckingPermission(operation, resource));
78 79 }
79 80  
80 81 if (!securityContext.hasPermission(resource, operation)) {
81   - logger.severe(bundle.doesNotHavePermission(username, operation, resource));
82   - throw new DemoiselleSecurityException(bundle.doesNotHavePermission(username, operation, resource), Response.Status.UNAUTHORIZED.getStatusCode());
  82 + logger.severe(bundle.doesNotHavePermission(operation, resource));
  83 + throw new DemoiselleSecurityException(bundle.doesNotHavePermission(operation, resource), UNAUTHORIZED.getStatusCode());
83 84 }
84 85  
85   - logger.fine(bundle.accessAllowed(username, operation, resource));
86 86 return ic.proceed();
87 87 }
88 88  
... ... @@ -107,7 +107,7 @@ public class RequiredPermissionInterceptor implements Serializable {
107 107 requiredPermission = ic.getTarget().getClass().getAnnotation(RequiredPermission.class);
108 108 }
109 109  
110   - if (Strings.isEmpty(requiredPermission.resource())) {
  110 + if (isEmpty(requiredPermission.resource())) {
111 111 if (ic.getTarget().getClass().getAnnotation(Name.class) == null) {
112 112 return ic.getTarget().getClass().getSimpleName();
113 113 } else {
... ... @@ -139,7 +139,7 @@ public class RequiredPermissionInterceptor implements Serializable {
139 139 requiredPermission = ic.getTarget().getClass().getAnnotation(RequiredPermission.class);
140 140 }
141 141  
142   - if (Strings.isEmpty(requiredPermission.operation())) {
  142 + if (isEmpty(requiredPermission.operation())) {
143 143 if (ic.getMethod().getAnnotation(Name.class) == null) {
144 144 return ic.getMethod().getName();
145 145 } else {
... ...
demoiselle-security/src/main/java/org/demoiselle/jee/security/interceptor/RequiredRoleInterceptor.java
... ... @@ -13,11 +13,14 @@ import javax.interceptor.InvocationContext;
13 13 import java.io.Serializable;
14 14 import java.util.ArrayList;
15 15 import java.util.Arrays;
  16 +import static java.util.Arrays.asList;
16 17 import java.util.List;
17 18  
18 19 import java.util.logging.Logger;
19 20 import javax.inject.Inject;
  21 +import static javax.interceptor.Interceptor.Priority.APPLICATION;
20 22 import javax.ws.rs.core.Response;
  23 +import static javax.ws.rs.core.Response.Status.UNAUTHORIZED;
21 24 import org.demoiselle.jee.core.interfaces.security.DemoisellePrincipal;
22 25 import org.demoiselle.jee.core.util.ResourceBundle;
23 26 import org.demoiselle.jee.security.annotation.RequiredRole;
... ... @@ -34,7 +37,7 @@ import org.demoiselle.jee.security.message.DemoiselleSecurityMessages;
34 37 */
35 38 @RequiredRole(value = "")
36 39 @Interceptor
37   -@Priority(Interceptor.Priority.APPLICATION)
  40 +@Priority(APPLICATION)
38 41 public class RequiredRoleInterceptor implements Serializable {
39 42  
40 43 private static final long serialVersionUID = 1L;
... ... @@ -71,24 +74,17 @@ public class RequiredRoleInterceptor implements Serializable {
71 74 public Object manage(final InvocationContext ic) throws Exception {
72 75 List<String> roles = getRoles(ic);
73 76  
74   - String username = null;
75   -
76   - if (securityContext.isLoggedIn()) {
77   - username = loggedUser.getName();
78   - }
79   -
80   - List<String> userRoles = new ArrayList<String>();
  77 + List<String> userRoles = new ArrayList<>();
81 78  
82 79 for (String role : roles) {
83 80 if (securityContext.hasRole(role)) {
84   - logger.finest(bundle.accessCheckingRole(username, role));
85 81 userRoles.add(role);
86 82 }
87 83 }
88 84  
89 85 if (userRoles.isEmpty()) {
90   - logger.severe(bundle.doesNotHaveRole(username, roles.toString()));
91   - throw new DemoiselleSecurityException(bundle.doesNotHaveRole(username, roles.toString()), Response.Status.UNAUTHORIZED.getStatusCode());
  86 + logger.severe(bundle.doesNotHaveRole(roles.toString()));
  87 + throw new DemoiselleSecurityException(bundle.doesNotHaveRole(roles.toString()), UNAUTHORIZED.getStatusCode());
92 88 }
93 89  
94 90 return ic.proceed();
... ... @@ -112,7 +108,7 @@ public class RequiredRoleInterceptor implements Serializable {
112 108 roles = ic.getMethod().getAnnotation(RequiredRole.class).value();
113 109 }
114 110  
115   - return Arrays.asList(roles);
  111 + return asList(roles);
116 112 }
117 113  
118 114 }
... ...
demoiselle-security/src/main/java/org/demoiselle/jee/security/message/DemoiselleSecurityMessages.java
... ... @@ -13,13 +13,7 @@ import org.apache.deltaspike.core.api.message.MessageTemplate;
13 13 public interface DemoiselleSecurityMessages {
14 14  
15 15 @MessageTemplate("{access-checking-permission}")
16   - String accessCheckingPermission(String usuario, String operacao, String recurso);
17   -
18   - @MessageTemplate("{access-checking-role}")
19   - String accessCheckingRole(String usuario, String role);
20   -
21   - @MessageTemplate("{access-allowed}")
22   - String accessAllowed(String usuario, String operacao, String recurso);
  16 + String accessCheckingPermission(String operacao, String recurso);
23 17  
24 18 @MessageTemplate("{access-denied}")
25 19 String accessDenied(String usuario, String operacao, String recurso);
... ... @@ -31,9 +25,9 @@ public interface DemoiselleSecurityMessages {
31 25 String invalidCredentials();
32 26  
33 27 @MessageTemplate("{does-not-have-role}")
34   - String doesNotHaveRole(String usuario, String role);
  28 + String doesNotHaveRole(String role);
35 29  
36 30 @MessageTemplate("{does-not-have-permission}")
37   - String doesNotHavePermission(String usuario, String operacao, String recurso);
  31 + String doesNotHavePermission(String operacao, String recurso);
38 32  
39 33 }
... ...
demoiselle-security/src/main/resources/org/demoiselle/jee/security/message/DemoiselleSecurityMessages.properties
1   -access-checking-permission=Verificando permiss\u00e3o do usu\u00e1rio %s para executar a a\u00e7\u00e3o %s no recurso %s
  1 +access-checking-permission=O usu\u00e1rio n\u00e3o tem permiss\u00e3o para executar a a\u00e7\u00e3o %s no recurso %s
2 2 access-checking-role=Verificando permiss\u00e3o do usu\u00e1rio %s para a role %s
3 3 access-allowed=O usu\u00e1rio %s acessou o recurso %s com a a\u00e7\u00e3o %s
4   -access-denied=O usu\u00e1rio %s n\u00e3o possui permiss\u00e3o para executar a a\u00e7\u00e3o %s no recurso %s
  4 +access-denied=O usu\u00e1rio n\u00e3o possui permiss\u00e3o para executar a a\u00e7\u00e3o %s no recurso %s
5 5 user-not-authenticated=Usu\u00e1rio n\u00e3o autenticado
6 6 invalid-credentials=Usu\u00e1rio ou senha inv\u00e1lidos
7   -does-not-have-role=Usu\u00e1rio %s n\u00e3o possui a role\: %s
8   -does-not-have-permission=Usu\u00e1rio %s n\u00e3o possui a permiss\u00e3o para executar a a\u00e7\u00e3o %s no recurso %s
  7 +does-not-have-role=O Usu\u00e1rio n\u00e3o possui a role\:%s
  8 +does-not-have-permission=O Usu\u00e1rio n\u00e3o possui a permiss\u00e3o para executar a a\u00e7\u00e3o %s no recurso %s
... ...