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