Commit fcb6b85781789da62441aeafff9c004281d71389

Authored by PauloGladson
1 parent cde21938

Segurança

Showing 25 changed files with 551 additions and 713 deletions   Show diff stats
basic/src/main/java/org/demoiselle/jee/security/basic/impl/SecurityContextImpl.java
1 package org.demoiselle.jee.security.basic.impl; 1 package org.demoiselle.jee.security.basic.impl;
2 2
  3 +import org.demoiselle.jee.security.Token;
3 import javax.enterprise.context.Dependent; 4 import javax.enterprise.context.Dependent;
4 -import java.io.Serializable;  
5 import java.security.Principal; 5 import java.security.Principal;
6 import java.util.Map; 6 import java.util.Map;
7 import java.util.Set; 7 import java.util.Set;
8 import javax.inject.Inject; 8 import javax.inject.Inject;
9 import org.demoiselle.jee.core.util.ResourceBundle; 9 import org.demoiselle.jee.core.util.ResourceBundle;
10 -import org.demoiselle.jee.security.SecurityContext;  
11 -import org.demoiselle.jee.security.TokensManager; 10 +import org.demoiselle.jee.security.interfaces.SecurityContext;
12 import org.demoiselle.jee.security.exception.NotLoggedInException; 11 import org.demoiselle.jee.security.exception.NotLoggedInException;
13 12
14 /** 13 /**
@@ -23,14 +22,13 @@ public class SecurityContextImpl implements SecurityContext { @@ -23,14 +22,13 @@ public class SecurityContextImpl implements SecurityContext {
23 22
24 private static final long serialVersionUID = 1L; 23 private static final long serialVersionUID = 1L;
25 24
26 - private String token;  
27 -  
28 - private Principal user;  
29 -  
30 @Inject 25 @Inject
31 private TokensManager tm; 26 private TokensManager tm;
32 27
33 @Inject 28 @Inject
  29 + private Token token;
  30 +
  31 + @Inject
34 private ResourceBundle bundle; 32 private ResourceBundle bundle;
35 33
36 /** 34 /**
@@ -67,7 +65,10 @@ public class SecurityContextImpl implements SecurityContext { @@ -67,7 +65,10 @@ public class SecurityContextImpl implements SecurityContext {
67 */ 65 */
68 @Override 66 @Override
69 public Principal getUser() { 67 public Principal getUser() {
70 - return this.user; 68 + if (token.getKey() != null && !token.getKey().isEmpty()) {
  69 + return tm.getUser(token.getKey());
  70 + }
  71 + return token.getPrincipal();
71 } 72 }
72 73
73 public void checkLoggedIn() throws NotLoggedInException { 74 public void checkLoggedIn() throws NotLoggedInException {
@@ -98,20 +99,25 @@ public class SecurityContextImpl implements SecurityContext { @@ -98,20 +99,25 @@ public class SecurityContextImpl implements SecurityContext {
98 99
99 @Override 100 @Override
100 public void setUser(Principal principal) { 101 public void setUser(Principal principal) {
101 - this.token = tm.create(principal);  
102 - this.user = principal; 102 + token.setKey(tm.getToken(principal));
  103 + token.setPrincipal(principal);
103 } 104 }
104 105
105 @Override 106 @Override
106 public String getToken() { 107 public String getToken() {
107 - return token; 108 + if (token.getKey() != null && token.getKey().isEmpty()) {
  109 + token.setKey(tm.getToken(token.getPrincipal()));
  110 + }
  111 + return token.getKey();
108 } 112 }
109 113
110 @Override 114 @Override
111 - public void setToken(String token) {  
112 - this.user = tm.getUser(token);  
113 - this.token = token; 115 + public void setToken(String chave) {
  116 + token.setPrincipal(tm.getUser(chave));
  117 + if (token.getPrincipal() == null) {
  118 + throw new NotLoggedInException(bundle.getString("user-not-authenticated"));
  119 + }
  120 + token.setKey(chave);
114 } 121 }
115 122
116 -  
117 } 123 }
basic/src/main/java/org/demoiselle/jee/security/basic/impl/TokensManager.java 0 → 100644
@@ -0,0 +1,56 @@ @@ -0,0 +1,56 @@
  1 +/*
  2 + * To change this license header, choose License Headers in Project Properties.
  3 + * To change this template file, choose Tools | Templates
  4 + * and open the template in the editor.
  5 + */
  6 +package org.demoiselle.jee.security.basic.impl;
  7 +
  8 +import java.security.Principal;
  9 +import java.util.Map;
  10 +import java.util.UUID;
  11 +import java.util.concurrent.ConcurrentHashMap;
  12 +import java.util.logging.Logger;
  13 +import javax.enterprise.context.ApplicationScoped;
  14 +import javax.enterprise.context.RequestScoped;
  15 +import javax.inject.Inject;
  16 +
  17 +/**
  18 + *
  19 + * @author 70744416353
  20 + */
  21 +@ApplicationScoped
  22 +public class TokensManager {
  23 +
  24 + private static ConcurrentHashMap<String, Principal> repo = new ConcurrentHashMap<>();
  25 +
  26 + @Inject
  27 + private Logger logger;
  28 +
  29 + public Principal getUser(String token) {
  30 + return repo.get(token);
  31 + }
  32 +
  33 + public String getToken(Principal user) {
  34 + String value = null;
  35 + if (!repo.containsValue(user)) {
  36 + value = UUID.randomUUID().toString();
  37 + repo.put(value, user);
  38 + } else {
  39 + for (Map.Entry<String, Principal> entry : repo.entrySet()) {
  40 + if (entry.getValue().equals(user)) {
  41 + return entry.getKey();
  42 + }
  43 + }
  44 + }
  45 + return value;
  46 + }
  47 +
  48 + public void remove(String token) {
  49 + repo.remove(token);
  50 + }
  51 +
  52 + public boolean validate(String token) {
  53 + return repo.containsKey(token);
  54 + }
  55 +
  56 +}
basic/src/main/java/org/demoiselle/jee/security/basic/impl/TokensManagerImpl.java
@@ -1,48 +0,0 @@ @@ -1,48 +0,0 @@
1 -/*  
2 - * To change this license header, choose License Headers in Project Properties.  
3 - * To change this template file, choose Tools | Templates  
4 - * and open the template in the editor.  
5 - */  
6 -package org.demoiselle.jee.security.basic.impl;  
7 -  
8 -import java.security.Principal;  
9 -import java.util.UUID;  
10 -import java.util.concurrent.ConcurrentHashMap;  
11 -import javax.enterprise.context.Dependent;  
12 -import org.demoiselle.jee.security.TokensManager;  
13 -  
14 -/**  
15 - *  
16 - * @author 70744416353  
17 - */  
18 -@Dependent  
19 -public class TokensManagerImpl implements TokensManager {  
20 -  
21 - private static ConcurrentHashMap<String, Principal> repo = new ConcurrentHashMap<>();  
22 -  
23 - @Override  
24 - public Principal getUser(String token) {  
25 - return repo.get(token);  
26 - }  
27 -  
28 - @Override  
29 - public String create(Principal user) {  
30 - String value = null;  
31 - if (!repo.containsValue(user)) {  
32 - value = UUID.randomUUID().toString();  
33 - repo.put(value, user);  
34 - }  
35 - return value;  
36 - }  
37 -  
38 - @Override  
39 - public void remove(String token) {  
40 - repo.remove(token);  
41 - }  
42 -  
43 - @Override  
44 - public boolean validate(String token) {  
45 - return repo.containsKey(token);  
46 - }  
47 -  
48 -}  
basic/src/main/resources/demoiselle.properties
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +user-not-authenticated
0 \ No newline at end of file 2 \ No newline at end of file
basic/src/main/resources/messages.properties 0 → 100644
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +tipo-seguranca=basic
0 \ No newline at end of file 2 \ No newline at end of file
core/src/main/resources/demoiselle-core-bundle.properties
@@ -1,130 +0,0 @@ @@ -1,130 +0,0 @@
1 -# Demoiselle Framework  
2 -# Copyright (C) 2010 SERPRO  
3 -# ----------------------------------------------------------------------------  
4 -# This file is part of Demoiselle Framework.  
5 -#  
6 -# Demoiselle Framework is free software; you can redistribute it and/or  
7 -# modify it under the terms of the GNU Lesser General Public License version 3  
8 -# as published by the Free Software Foundation.  
9 -#  
10 -# This program is distributed in the hope that it will be useful,  
11 -# but WITHOUT ANY WARRANTY; without even the implied warranty of  
12 -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
13 -# GNU General Public License for more details.  
14 -#  
15 -# You should have received a copy of the GNU Lesser General Public License version 3  
16 -# along with this program; if not, see <http://www.gnu.org/licenses/>  
17 -# or write to the Free Software Foundation, Inc., 51 Franklin Street,  
18 -# Fifth Floor, Boston, MA 02110-1301, USA.  
19 -# ----------------------------------------------------------------------------  
20 -# Este arquivo \u00E9 parte do Framework Demoiselle.  
21 -#  
22 -# O Framework Demoiselle \u00E9 um software livre; voc\u00EA pode redistribu\u00ED-lo e/ou  
23 -# modific\u00E1-lo dentro dos termos da GNU LGPL vers\u00E3o 3 como publicada pela Funda\u00E7\u00E3o  
24 -# do Software Livre (FSF).  
25 -#  
26 -# Este programa \u00E9 distribu\u00EDdo na esperan\u00E7a que possa ser \u00FAtil, mas SEM NENHUMA  
27 -# GARANTIA; sem uma garantia impl\u00EDcita de ADEQUA\u00C7\u00C3O a qualquer MERCADO ou  
28 -# APLICA\u00C7\u00C3O EM PARTICULAR. Veja a Licen\u00E7a P\u00FAblica Geral GNU/LGPL em portugu\u00EAs  
29 -# para maiores detalhes.  
30 -#  
31 -# Voc\u00EA deve ter recebido uma c\u00F3pia da GNU LGPL vers\u00E3o 3, sob o t\u00EDtulo  
32 -# "LICENCA.txt", junto com esse programa. Se n\u00E3o, acesse <http://www.gnu.org/licenses/>  
33 -# ou escreva para a Funda\u00E7\u00E3o do Software Livre (FSF) Inc.,  
34 -# 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.  
35 -  
36 -version=${project.version}  
37 -engine-on=Iniciando o Demoiselle Framework ${project.version} (Neo)  
38 -resource-not-found=Arquivo {0} n\u00E3o foi encontrado  
39 -key-not-found=A chave {0} n\u00E3o foi encontrada  
40 -ambiguous-strategy-resolution=Foi detectada ambiguidade da interface {0} com as seguintes implementa\u00E7\u00F5es\: {1}. Para resolver o conflito, defina explicitamente a implementa\u00E7\u00E3o no demoiselle.properties.  
41 -ambiguous-bean-resolution=Falha ao obter {0} pois foi detectada ambiguidade nas seguintes implementa\u00E7\u00F5es\: {1}  
42 -bean-not-found=Voc\u00EA est\u00E1 tentando obter um objeto n\u00E3o reconhecido pelo CDI via Beans.getReference({0})  
43 -store-not-found=O objeto do tipo [{0}] n\u00E3o pode ser armazenado no escopo indicado\: {1}  
44 -more-than-one-exceptionhandler-defined-for-same-class=Foi definido mais de um m\u00E9todo na classe {0} para tratar a exce\u00E7\u00E3o {1}  
45 -handling-exception=Tratando a exce\u00E7\u00E3o {0}  
46 -taking-off=O Demoiselle ${project.version} decolou  
47 -engine-off=Desligando os motores do Demoiselle ${project.version}  
48 -setting-up-bean-manager=BeanManager dispon\u00EDvel atrav\u00E9s do utilit\u00E1rio {0}  
49 -  
50 -user-transaction-lookup-fail=N\u00E3o foi encontrada nenhuma transa\u00E7\u00E3o com o nome {0} no contexto JNDI  
51 -transactional-execution=Execu\u00E7\u00E3o transacional de {0}  
52 -begin-transaction=Transa\u00E7\u00E3o iniciada  
53 -transaction-marked-rollback=Transa\u00E7\u00E3o marcada para rollback [{0}]  
54 -transaction-already-finalized=A transa\u00E7\u00E3o j\u00E1 havia sido finalizada  
55 -transaction-commited=Transa\u00E7\u00E3o finalizada com sucesso  
56 -transaction-rolledback=Transa\u00E7\u00E3o finalizada com rollback  
57 -  
58 -bootstrap.configuration.processing=Processando {0}  
59 -bootstrap-context-already-managed=O contexto {0} para o escopo {1} j\u00E1 foi adicionado  
60 -bootstrap-context-added=Adicionando o contexto {0} para o escopo {1}  
61 -  
62 -loading-configuration-class=Carregando a classe de configura\u00E7\u00E3o {0}  
63 -configuration-field-loaded={0}: {2}  
64 -configuration-attribute-is-mandatory=A configura\u00E7\u00E3o {0} \u00E9 obrigat\u00F3ria, mas n\u00E3o foi encontrada em {1}  
65 -configuration-name-attribute-cant-be-empty=A nota\u00E7\u00E3o @Name n\u00E3o pode estar em branco  
66 -configuration-generic-extraction-error=Ocorreu um erro durante a extra\u00E7\u00E3o do tipo {0} com o extrator {1}  
67 -configuration-dot-after-prefix=N\u00E3o \u00E9 necess\u00E1rio adicionar o ponto ap\u00F3s o prefixo para uma classe de configura\u00E7\u00E3o. \u00C9 recomendado que sejam retirados, pois poder\u00E3o causar erros em vers\u00F5es futuras do Framework.  
68 -configuration-key-not-found={0}\: [n\u00E3o encontrada]  
69 -configuration-extractor-not-found=N\u00E3o foi poss\u00EDvel encontrar a classe extratora para o atributo {0}. Implemente a interface {1} para criar sua classe extratora.  
70 -configuration-not-conversion=N\u00E3o \u00E9 poss\u00EDvel converter o valor {0} para o tipo {1}  
71 -  
72 -transaction-not-defined=Nenhuma transa\u00E7\u00E3o foi definida. Para utilizar @{0} \u00E9 preciso definir a propriedade frameworkdemoiselle.transaction.class com a estrat\u00E9gia de transa\u00E7\u00E3o desejada no arquivo demoiselle.properties  
73 -executing-all=Executando m\u00E9todos anotados com @{0}  
74 -custom-context-selected=Produzindo inst\u00E2ncia do contexto {0}  
75 -custom-context-was-activated=O contexto {0} foi ativado para o escopo {1}  
76 -custom-context-was-deactivated=O contexto {0} foi desativado para o escopo {1}  
77 -custom-context-already-activated=N\u00E3o foi poss\u00EDvel ativar o contexto {0}, o escopo {1} j\u00E1 est\u00E1 ativo no contexto {2}  
78 -custom-context-not-found=N\u00E3o foi encontrado um contexto gerenciado do tipo [{0}] para o escopo [{1}]  
79 -custom-context-manager-not-initialized=ContextManager n\u00E3o foi inicializado. Chame [initialize] ao capturar o evento [AfterBeanDiscovery] em uma extens\u00E3o CDI  
80 -  
81 -error-creating-new-instance-for=Error creating a new instance for "{0}"  
82 -executed-successfully={0} execultado com sucesso  
83 -must-declare-one-single-parameter=Voc\u00EA deve declarar um par\u00E2metro \u00FAnico em {0}  
84 -loading-default-transaction-manager=Carregando o gerenciador de transa\u00E7\u00E3o padr\u00E3o {0}  
85 -results-count-greater-page-size=Quantidade de resultados {0} \u00E9 maior que o tamanho da p\u00E1gina {1}  
86 -page-result=Resultado paginado [p\u00E1gina\={0}, total de resultados\={1}]  
87 -pagination-not-initialized=Pagina\u00E7\u00E3o n\u00E3o inicializada. Inicialize o sistema de pagina\u00E7\u00E3o definindo a p\u00E1gina atual ou o total de resultados ao menos uma vez na requisi\u00E7\u00E3o.  
88 -pagination-invalid-value=Valor inv\u00E1lido para paginador: [{0}].  
89 -page=P\u00E1gina [n\u00FAmero\={0}, tamanho\={1}]  
90 -processing=Processando\: {0}  
91 -processing-fail=Falha no processamento devido a uma exce\u00E7\u00E3o lan\u00E7ada pela aplica\u00E7\u00E3o  
92 -for= \ para\:  
93 -file-not-found=O arquivo {0} n\u00E3o foi encontrado  
94 -  
95 -adding-message-to-context=Adicionando uma mensagem no contexto: [{0}]  
96 -access-checking=Verificando permiss\u00E3o do usu\u00E1rio {0} para executar a a\u00E7\u00E3o {1} no recurso {2}  
97 -access-allowed=O usu\u00E1rio {0} acessou o recurso {2} com a a\u00E7\u00E3o {1}  
98 -access-denied=O usu\u00E1rio {0} n\u00E3o possui permiss\u00E3o para executar a a\u00E7\u00E3o {1} no recurso {2}  
99 -access-denied-ui=Voc\u00EA n\u00E3o est\u00E1 autorizado a executar a a\u00E7\u00E3o {1} no recurso {0}  
100 -authorizer-not-defined=Nenhuma regra de resolu\u00E7\u00E3o de permiss\u00F5es foi definida. Para utilizar @{0} \u00E9 preciso definir a propriedade frameworkdemoiselle.security.authorizer.class como regra de resolu\u00E7\u00E3o de permiss\u00F5es desejada no arquivo demoiselle.properties.  
101 -user-not-authenticated=Usu\u00E1rio n\u00E3o autenticado  
102 -invalid-credentials=Usu\u00E1rio ou senha inv\u00E1lidos  
103 -has-role-verification=Verificando se o usu\u00E1rio {0} possui a(s) role(s)\: {1}  
104 -does-not-have-role=Usu\u00E1rio {0} n\u00E3o possui a(s) role(s)\: {1}  
105 -does-not-have-role-ui=Para acessar este recurso \u00E9 necess\u00E1rio ser {0}  
106 -user-has-role=Usu\u00E1rio {0} possui a(s) role(s)\: {1}  
107 -  
108 -authenticator-not-defined=Nenhum mecanismo de autentica\u00E7\u00E3o foi definido. Para utilizar {0} \u00E9 preciso definir a propriedade frameworkdemoiselle.security.authenticator.class como mecanismo de autentica\u00E7\u00E3o desejado no arquivo demoiselle.properties.  
109 -  
110 -management-notification-attribute-changed=O atributo [{0}] da classe gerenciada [{1}] foi alterado  
111 -management-null-class-defined=O controlador de gerenciamento informado n\u00E3o pode ser [null]  
112 -management-abstract-class-defined=O controlador de gerenciamento [{0}] precisa ser uma classe concreta  
113 -management-no-annotation-found=Classe {0} precisa ser anotada com @ManagementController  
114 -management-invalid-property-no-getter-setter=Falha ao inicializar classe gerenciada {0}, n\u00E3o foi encontrado um m\u00E9todo get ou m\u00E9todo set para a propriedade {1}  
115 -management-invalid-property-as-operation=Falha ao inicializar classe gerenciada {0}, n\u00E3o \u00E9 poss\u00EDvel declarar uma propriedade cujo m\u00E9todo get ou set \u00E9 uma opera\u00E7\u00E3o  
116 -management-introspection-error=Erro ao ler atributos da classe gerenciada {0}  
117 -management-type-not-found=A classe gerenciada informada n\u00E3o existe\: {0}  
118 -management-invoke-error=Erro ao tentar invocar a opera\u00E7\u00E3o "{0}" da classe gerenciada, a opera\u00E7\u00E3o n\u00E3o foi encontrada  
119 -management-write-value-error=N\u00E3o foi poss\u00EDvel definir um valor para a propriedade {0}  
120 -management-read-value-error=N\u00E3o foi poss\u00EDvel ler o valor da propriedade {0}  
121 -management-debug-acessing-property=Acessando propriedade {0} da classe gerenciada {1}  
122 -management-debug-setting-property=Definindo novo valor para propriedade {0} da classe gerenciada {1}  
123 -management-debug-invoking-operation=Invocando opera\u00E7\u00E3o {0} da classe gerenciada {1}  
124 -management-debug-starting-custom-context=Levantando contexto {0} para executar comando na classe gerenciada {1}  
125 -management-debug-stoping-custom-context=Desligando contexto {0} para classe gerenciada {1}  
126 -management-debug-registering-managed-type=Registrando classe gerenciada [{0}]  
127 -management-debug-processing-management-extension=Processando extens\u00E3o de gerenciamento [{0}]  
128 -management-debug-removing-management-extension=Desativando extens\u00E3o de gerenciamento [{0}]  
129 -management-validation-constraint-violation=Ocorreu um erro de valida\u00E7\u00E3o na classe [{0}] ao definir um valor para a propriedade [{1}]\: [{2}]  
130 -management-validation-validator-not-found=Nenhum provedor de valida\u00E7\u00E3o de beans encontrado, as anota\u00E7\u00F5es de valida\u00E7\u00E3o n\u00E3o ser\u00E3o processadas  
core/src/main/resources/messages.properties 0 → 100644
@@ -0,0 +1,81 @@ @@ -0,0 +1,81 @@
  1 +
  2 +version=${project.version}
  3 +engine-on=Iniciando o Demoiselle Framework ${project.version} (Neo)
  4 +resource-not-found=Arquivo {0} n\u00e3o foi encontrado
  5 +key-not-found=A chave {0} n\u00e3o foi encontrada
  6 +ambiguous-strategy-resolution=Foi detectada ambiguidade da interface {0} com as seguintes implementa\u00e7\u00f5es\: {1}. Para resolver o conflito, defina explicitamente a implementa\u00e7\u00e3o no demoiselle.properties.
  7 +ambiguous-bean-resolution=Falha ao obter {0} pois foi detectada ambiguidade nas seguintes implementa\u00e7\u00f5es\: {1}
  8 +bean-not-found=Voc\u00ea est\u00e1 tentando obter um objeto n\u00e3o reconhecido pelo CDI via Beans.getReference({0})
  9 +store-not-found=O objeto do tipo [{0}] n\u00e3o pode ser armazenado no escopo indicado\: {1}
  10 +more-than-one-exceptionhandler-defined-for-same-class=Foi definido mais de um m\u00e9todo na classe {0} para tratar a exce\u00e7\u00e3o {1}
  11 +handling-exception=Tratando a exce\u00e7\u00e3o {0}
  12 +taking-off=O Demoiselle ${project.version} decolou
  13 +engine-off=Desligando os motores do Demoiselle ${project.version}
  14 +setting-up-bean-manager=BeanManager dispon\u00edvel atrav\u00e9s do utilit\u00e1rio {0}
  15 +
  16 +user-transaction-lookup-fail=N\u00e3o foi encontrada nenhuma transa\u00e7\u00e3o com o nome {0} no contexto JNDI
  17 +transactional-execution=Execu\u00e7\u00e3o transacional de {0}
  18 +begin-transaction=Transa\u00e7\u00e3o iniciada
  19 +transaction-marked-rollback=Transa\u00e7\u00e3o marcada para rollback [{0}]
  20 +transaction-already-finalized=A transa\u00e7\u00e3o j\u00e1 havia sido finalizada
  21 +transaction-commited=Transa\u00e7\u00e3o finalizada com sucesso
  22 +transaction-rolledback=Transa\u00e7\u00e3o finalizada com rollback
  23 +
  24 +bootstrap.configuration.processing=Processando {0}
  25 +bootstrap-context-already-managed=O contexto {0} para o escopo {1} j\u00e1 foi adicionado
  26 +bootstrap-context-added=Adicionando o contexto {0} para o escopo {1}
  27 +
  28 +loading-configuration-class=Carregando a classe de configura\u00e7\u00e3o {0}
  29 +configuration-field-loaded={0}: {2}
  30 +configuration-attribute-is-mandatory=A configura\u00e7\u00e3o {0} \u00e9 obrigat\u00f3ria, mas n\u00e3o foi encontrada em {1}
  31 +configuration-name-attribute-cant-be-empty=A nota\u00e7\u00e3o @Name n\u00e3o pode estar em branco
  32 +configuration-generic-extraction-error=Ocorreu um erro durante a extra\u00e7\u00e3o do tipo {0} com o extrator {1}
  33 +configuration-dot-after-prefix=N\u00e3o \u00e9 necess\u00e1rio adicionar o ponto ap\u00f3s o prefixo para uma classe de configura\u00e7\u00e3o. \u00c9 recomendado que sejam retirados, pois poder\u00e3o causar erros em vers\u00f5es futuras do Framework.
  34 +configuration-key-not-found={0}\: [n\u00e3o encontrada]
  35 +configuration-extractor-not-found=N\u00e3o foi poss\u00edvel encontrar a classe extratora para o atributo {0}. Implemente a interface {1} para criar sua classe extratora.
  36 +configuration-not-conversion=N\u00e3o \u00e9 poss\u00edvel converter o valor {0} para o tipo {1}
  37 +
  38 +transaction-not-defined=Nenhuma transa\u00e7\u00e3o foi definida. Para utilizar @{0} \u00e9 preciso definir a propriedade frameworkdemoiselle.transaction.class com a estrat\u00e9gia de transa\u00e7\u00e3o desejada no arquivo demoiselle.properties
  39 +executing-all=Executando m\u00e9todos anotados com @{0}
  40 +custom-context-selected=Produzindo inst\u00e2ncia do contexto {0}
  41 +custom-context-was-activated=O contexto {0} foi ativado para o escopo {1}
  42 +custom-context-was-deactivated=O contexto {0} foi desativado para o escopo {1}
  43 +custom-context-already-activated=N\u00e3o foi poss\u00edvel ativar o contexto {0}, o escopo {1} j\u00e1 est\u00e1 ativo no contexto {2}
  44 +custom-context-not-found=N\u00e3o foi encontrado um contexto gerenciado do tipo [{0}] para o escopo [{1}]
  45 +custom-context-manager-not-initialized=ContextManager n\u00e3o foi inicializado. Chame [initialize] ao capturar o evento [AfterBeanDiscovery] em uma extens\u00e3o CDI
  46 +
  47 +error-creating-new-instance-for=Error creating a new instance for "{0}"
  48 +executed-successfully={0} execultado com sucesso
  49 +must-declare-one-single-parameter=Voc\u00ea deve declarar um par\u00e2metro \u00fanico em {0}
  50 +loading-default-transaction-manager=Carregando o gerenciador de transa\u00e7\u00e3o padr\u00e3o {0}
  51 +results-count-greater-page-size=Quantidade de resultados {0} \u00e9 maior que o tamanho da p\u00e1gina {1}
  52 +page-result=Resultado paginado [p\u00e1gina\={0}, total de resultados\={1}]
  53 +pagination-not-initialized=Pagina\u00e7\u00e3o n\u00e3o inicializada. Inicialize o sistema de pagina\u00e7\u00e3o definindo a p\u00e1gina atual ou o total de resultados ao menos uma vez na requisi\u00e7\u00e3o.
  54 +pagination-invalid-value=Valor inv\u00e1lido para paginador: [{0}].
  55 +page=P\u00e1gina [n\u00famero\={0}, tamanho\={1}]
  56 +processing=Processando\: {0}
  57 +processing-fail=Falha no processamento devido a uma exce\u00e7\u00e3o lan\u00e7ada pela aplica\u00e7\u00e3o
  58 +for= \ para\:
  59 +file-not-found=O arquivo {0} n\u00e3o foi encontrado
  60 +
  61 +management-notification-attribute-changed=O atributo [{0}] da classe gerenciada [{1}] foi alterado
  62 +management-null-class-defined=O controlador de gerenciamento informado n\u00e3o pode ser [null]
  63 +management-abstract-class-defined=O controlador de gerenciamento [{0}] precisa ser uma classe concreta
  64 +management-no-annotation-found=Classe {0} precisa ser anotada com @ManagementController
  65 +management-invalid-property-no-getter-setter=Falha ao inicializar classe gerenciada {0}, n\u00e3o foi encontrado um m\u00e9todo get ou m\u00e9todo set para a propriedade {1}
  66 +management-invalid-property-as-operation=Falha ao inicializar classe gerenciada {0}, n\u00e3o \u00e9 poss\u00edvel declarar uma propriedade cujo m\u00e9todo get ou set \u00e9 uma opera\u00e7\u00e3o
  67 +management-introspection-error=Erro ao ler atributos da classe gerenciada {0}
  68 +management-type-not-found=A classe gerenciada informada n\u00e3o existe\: {0}
  69 +management-invoke-error=Erro ao tentar invocar a opera\u00e7\u00e3o "{0}" da classe gerenciada, a opera\u00e7\u00e3o n\u00e3o foi encontrada
  70 +management-write-value-error=N\u00e3o foi poss\u00edvel definir um valor para a propriedade {0}
  71 +management-read-value-error=N\u00e3o foi poss\u00edvel ler o valor da propriedade {0}
  72 +management-debug-acessing-property=Acessando propriedade {0} da classe gerenciada {1}
  73 +management-debug-setting-property=Definindo novo valor para propriedade {0} da classe gerenciada {1}
  74 +management-debug-invoking-operation=Invocando opera\u00e7\u00e3o {0} da classe gerenciada {1}
  75 +management-debug-starting-custom-context=Levantando contexto {0} para executar comando na classe gerenciada {1}
  76 +management-debug-stoping-custom-context=Desligando contexto {0} para classe gerenciada {1}
  77 +management-debug-registering-managed-type=Registrando classe gerenciada [{0}]
  78 +management-debug-processing-management-extension=Processando extens\u00e3o de gerenciamento [{0}]
  79 +management-debug-removing-management-extension=Desativando extens\u00e3o de gerenciamento [{0}]
  80 +management-validation-constraint-violation=Ocorreu um erro de valida\u00e7\u00e3o na classe [{0}] ao definir um valor para a propriedade [{1}]\: [{2}]
  81 +management-validation-validator-not-found=Nenhum provedor de valida\u00e7\u00e3o de beans encontrado, as anota\u00e7\u00f5es de valida\u00e7\u00e3o n\u00e3o ser\u00e3o processadas
security/src/main/java/org/demoiselle/jee/security/JaxRsFilter.java
@@ -5,6 +5,8 @@ @@ -5,6 +5,8 @@
5 */ 5 */
6 package org.demoiselle.jee.security; 6 package org.demoiselle.jee.security;
7 7
  8 +import java.io.IOException;
  9 +import org.demoiselle.jee.security.interfaces.SecurityContext;
8 import java.util.logging.Logger; 10 import java.util.logging.Logger;
9 import javax.annotation.PostConstruct; 11 import javax.annotation.PostConstruct;
10 import javax.inject.Inject; 12 import javax.inject.Inject;
@@ -33,29 +35,41 @@ public class JaxRsFilter implements ClientRequestFilter, ClientResponseFilter, C @@ -33,29 +35,41 @@ public class JaxRsFilter implements ClientRequestFilter, ClientResponseFilter, C
33 @Inject 35 @Inject
34 private SecurityContext securityContext; 36 private SecurityContext securityContext;
35 37
36 - @Override  
37 - public void filter(ClientRequestContext requestContext) {  
38 - String token = requestContext.getHeaders().get("Authorization").toString();  
39 - if (!token.isEmpty()) {  
40 - securityContext.setToken(token);  
41 - } 38 + @PostConstruct
  39 + public void init() {
  40 + LOG.info("Demoiselle Module - Security");
42 } 41 }
43 42
44 @Override 43 @Override
45 - public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) { 44 + public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
  45 + responseContext.getHeaders().putSingle("Authorization", "enabled");
  46 + responseContext.getHeaders().putSingle("x-content-type-options", "nosniff");
  47 + responseContext.getHeaders().putSingle("x-frame-options", "SAMEORIGIN");
  48 + responseContext.getHeaders().putSingle("x-xss-protection", "1; mode=block");
46 } 49 }
47 50
48 @Override 51 @Override
49 - public void filter(ContainerRequestContext requestContext) { 52 + public void filter(ContainerRequestContext requestContext) throws IOException {
  53 + try {
  54 + if (requestContext.getHeaders().containsKey("Authorization")) {
  55 + String token = requestContext.getHeaders().get("Authorization").toString().replace("[", "").replace("]", "");
  56 + if (!token.isEmpty()) {
  57 + securityContext.setToken(token);
  58 + }
  59 + }
  60 + } catch (Exception e) {
  61 + }
  62 +
50 } 63 }
51 64
52 @Override 65 @Override
53 - public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {  
54 - responseContext.getHeaders().putSingle("Authorization", "Basic"); 66 + public void filter(ClientRequestContext requestContext) throws IOException {
  67 +
55 } 68 }
56 69
57 - @PostConstruct  
58 - public void init() {  
59 - LOG.info("Demoiselle Module - Security"); 70 + @Override
  71 + public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException {
  72 +
60 } 73 }
  74 +
61 } 75 }
security/src/main/java/org/demoiselle/jee/security/LoggedIn.java
@@ -1,62 +0,0 @@ @@ -1,62 +0,0 @@
1 -/*  
2 - * Demoiselle Framework  
3 - * Copyright (C) 2010 SERPRO  
4 - * ----------------------------------------------------------------------------  
5 - * This file is part of Demoiselle Framework.  
6 - *  
7 - * Demoiselle Framework is free software; you can redistribute it and/or  
8 - * modify it under the terms of the GNU Lesser General Public License version 3  
9 - * as published by the Free Software Foundation.  
10 - *  
11 - * This program is distributed in the hope that it will be useful,  
12 - * but WITHOUT ANY WARRANTY; without even the implied warranty of  
13 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
14 - * GNU General Public License for more details.  
15 - *  
16 - * You should have received a copy of the GNU Lesser General Public License version 3  
17 - * along with this program; if not, see <http://www.gnu.org/licenses/>  
18 - * or write to the Free Software Foundation, Inc., 51 Franklin Street,  
19 - * Fifth Floor, Boston, MA 02110-1301, USA.  
20 - * ----------------------------------------------------------------------------  
21 - * Este arquivo é parte do Framework Demoiselle.  
22 - *  
23 - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou  
24 - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação  
25 - * do Software Livre (FSF).  
26 - *  
27 - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA  
28 - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou  
29 - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português  
30 - * para maiores detalhes.  
31 - *  
32 - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título  
33 - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>  
34 - * ou escreva para a Fundação do Software Livre (FSF) Inc.,  
35 - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.  
36 - */  
37 -  
38 -package org.demoiselle.jee.security;  
39 -  
40 -import javax.interceptor.InterceptorBinding;  
41 -import java.lang.annotation.Inherited;  
42 -import java.lang.annotation.Retention;  
43 -import java.lang.annotation.Target;  
44 -  
45 -import static java.lang.annotation.ElementType.METHOD;  
46 -import static java.lang.annotation.ElementType.TYPE;  
47 -import static java.lang.annotation.RetentionPolicy.RUNTIME;  
48 -  
49 -/**  
50 - * <p>  
51 - * Indicates that a specific permission is required in order to invocate the annotated method or class.  
52 - * </p>  
53 - *  
54 - * @author SERPRO  
55 - */  
56 -  
57 -@Inherited  
58 -@InterceptorBinding  
59 -@Target({ METHOD, TYPE })  
60 -@Retention(RUNTIME)  
61 -public @interface LoggedIn {  
62 -}  
security/src/main/java/org/demoiselle/jee/security/RequiredPermission.java
@@ -1,65 +0,0 @@ @@ -1,65 +0,0 @@
1 -/*  
2 - * Demoiselle Framework  
3 - * Copyright (C) 2010 SERPRO  
4 - * ----------------------------------------------------------------------------  
5 - * This file is part of Demoiselle Framework.  
6 - *  
7 - * Demoiselle Framework is free software; you can redistribute it and/or  
8 - * modify it under the terms of the GNU Lesser General Public License version 3  
9 - * as published by the Free Software Foundation.  
10 - *  
11 - * This program is distributed in the hope that it will be useful,  
12 - * but WITHOUT ANY WARRANTY; without even the implied warranty of  
13 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
14 - * GNU General Public License for more details.  
15 - *  
16 - * You should have received a copy of the GNU Lesser General Public License version 3  
17 - * along with this program; if not, see <http://www.gnu.org/licenses/>  
18 - * or write to the Free Software Foundation, Inc., 51 Franklin Street,  
19 - * Fifth Floor, Boston, MA 02110-1301, USA.  
20 - * ----------------------------------------------------------------------------  
21 - * Este arquivo é parte do Framework Demoiselle.  
22 - *  
23 - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou  
24 - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação  
25 - * do Software Livre (FSF).  
26 - *  
27 - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA  
28 - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou  
29 - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português  
30 - * para maiores detalhes.  
31 - *  
32 - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título  
33 - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>  
34 - * ou escreva para a Fundação do Software Livre (FSF) Inc.,  
35 - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.  
36 - */  
37 -package org.demoiselle.jee.security;  
38 -  
39 -import javax.enterprise.util.Nonbinding;  
40 -import javax.interceptor.InterceptorBinding;  
41 -import java.lang.annotation.Inherited;  
42 -import java.lang.annotation.Retention;  
43 -import java.lang.annotation.Target;  
44 -  
45 -import static java.lang.annotation.ElementType.METHOD;  
46 -import static java.lang.annotation.ElementType.TYPE;  
47 -import static java.lang.annotation.RetentionPolicy.RUNTIME;  
48 -  
49 -/**  
50 - * Indicates that a specific permission is required in order to invocate the annotated method or class.  
51 - *  
52 - * @author SERPRO  
53 - */  
54 -@Inherited  
55 -@InterceptorBinding  
56 -@Target({ METHOD, TYPE })  
57 -@Retention(RUNTIME)  
58 -public @interface RequiredPermission {  
59 -  
60 - @Nonbinding  
61 - String resource() default "";  
62 -  
63 - @Nonbinding  
64 - String operation() default "";  
65 -}  
security/src/main/java/org/demoiselle/jee/security/RequiredRole.java
@@ -1,65 +0,0 @@ @@ -1,65 +0,0 @@
1 -/*  
2 - * Demoiselle Framework  
3 - * Copyright (C) 2010 SERPRO  
4 - * ----------------------------------------------------------------------------  
5 - * This file is part of Demoiselle Framework.  
6 - *  
7 - * Demoiselle Framework is free software; you can redistribute it and/or  
8 - * modify it under the terms of the GNU Lesser General Public License version 3  
9 - * as published by the Free Software Foundation.  
10 - *  
11 - * This program is distributed in the hope that it will be useful,  
12 - * but WITHOUT ANY WARRANTY; without even the implied warranty of  
13 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
14 - * GNU General Public License for more details.  
15 - *  
16 - * You should have received a copy of the GNU Lesser General Public License version 3  
17 - * along with this program; if not, see <http://www.gnu.org/licenses/>  
18 - * or write to the Free Software Foundation, Inc., 51 Franklin Street,  
19 - * Fifth Floor, Boston, MA 02110-1301, USA.  
20 - * ----------------------------------------------------------------------------  
21 - * Este arquivo é parte do Framework Demoiselle.  
22 - *  
23 - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou  
24 - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação  
25 - * do Software Livre (FSF).  
26 - *  
27 - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA  
28 - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou  
29 - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português  
30 - * para maiores detalhes.  
31 - *  
32 - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título  
33 - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>  
34 - * ou escreva para a Fundação do Software Livre (FSF) Inc.,  
35 - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.  
36 - */  
37 -package org.demoiselle.jee.security;  
38 -  
39 -import javax.enterprise.util.Nonbinding;  
40 -import javax.interceptor.InterceptorBinding;  
41 -import java.lang.annotation.Inherited;  
42 -import java.lang.annotation.Retention;  
43 -import java.lang.annotation.Target;  
44 -  
45 -import static java.lang.annotation.ElementType.METHOD;  
46 -import static java.lang.annotation.ElementType.TYPE;  
47 -import static java.lang.annotation.RetentionPolicy.RUNTIME;  
48 -  
49 -/**  
50 - * <p>  
51 - * Indicates that the annotated method or class requires the user to have one or more roles associated in order to be  
52 - * invocated.  
53 - * </p>  
54 - *  
55 - * @author SERPRO  
56 - */  
57 -@Inherited  
58 -@InterceptorBinding  
59 -@Target({ METHOD, TYPE })  
60 -@Retention(RUNTIME)  
61 -public @interface RequiredRole {  
62 -  
63 - @Nonbinding  
64 - String[] value();  
65 -}  
security/src/main/java/org/demoiselle/jee/security/SecurityContext.java
@@ -1,116 +0,0 @@ @@ -1,116 +0,0 @@
1 -/*  
2 - * Demoiselle Framework  
3 - * Copyright (C) 2010 SERPRO  
4 - * ----------------------------------------------------------------------------  
5 - * This file is part of Demoiselle Framework.  
6 - *  
7 - * Demoiselle Framework is free software; you can redistribute it and/or  
8 - * modify it under the terms of the GNU Lesser General Public License version 3  
9 - * as published by the Free Software Foundation.  
10 - *  
11 - * This program is distributed in the hope that it will be useful,  
12 - * but WITHOUT ANY WARRANTY; without even the implied warranty of  
13 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
14 - * GNU General Public License for more details.  
15 - *  
16 - * You should have received a copy of the GNU Lesser General Public License version 3  
17 - * along with this program; if not, see <http://www.gnu.org/licenses/>  
18 - * or write to the Free Software Foundation, Inc., 51 Franklin Street,  
19 - * Fifth Floor, Boston, MA 02110-1301, USA.  
20 - * ----------------------------------------------------------------------------  
21 - * Este arquivo é parte do Framework Demoiselle.  
22 - *  
23 - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou  
24 - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação  
25 - * do Software Livre (FSF).  
26 - *  
27 - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA  
28 - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou  
29 - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português  
30 - * para maiores detalhes.  
31 - *  
32 - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título  
33 - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>  
34 - * ou escreva para a Fundação do Software Livre (FSF) Inc.,  
35 - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.  
36 - */  
37 -package org.demoiselle.jee.security;  
38 -  
39 -import java.io.Serializable;  
40 -import java.security.Principal;  
41 -import java.util.Map;  
42 -import java.util.Set;  
43 -import org.demoiselle.jee.security.exception.AuthorizationException;  
44 -import org.demoiselle.jee.security.exception.NotLoggedInException;  
45 -  
46 -/**  
47 - * <p>  
48 - * Structure used to handle both authentication and authorizations mechanisms.  
49 - * </p>  
50 - *  
51 - * @author SERPRO  
52 - */  
53 -public interface SecurityContext extends Serializable {  
54 -  
55 - /**  
56 - * Checks if a specific user is logged in.  
57 - *  
58 - * @return {@code true} if the user is logged in  
59 - */  
60 - boolean isLoggedIn();  
61 -  
62 - /**  
63 - * @throws NotLoggedInException if there is no user logged in a specific  
64 - * session  
65 - */  
66 - void checkLoggedIn();  
67 -  
68 - /**  
69 - * Checks if the logged user has permission to execute an specific operation  
70 - * on a specific resource.  
71 - *  
72 - * @param resource resource to be checked  
73 - * @param operation operation to be checked  
74 - * @return {@code true} if the user has the permission  
75 - * @throws AuthorizationException When the permission checking fails, this  
76 - * exception is thrown.  
77 - * @throws NotLoggedInException if there is no user logged in a specific  
78 - * session.  
79 - */  
80 - boolean hasPermission(String resource, String operation);  
81 -  
82 - /**  
83 - * Checks if the logged user has an specific role  
84 - *  
85 - * @param role role to be checked  
86 - * @return {@code true} if the user has the role  
87 - * @throws AuthorizationException When the permission checking fails, this  
88 - * exception is thrown.  
89 - * @throws NotLoggedInException if there is no user logged in a specific  
90 - * session.  
91 - */  
92 - boolean hasRole(String role);  
93 -  
94 - /**  
95 - * Return the user logged in the session.  
96 - *  
97 - * @return the user logged in a specific authenticated session. If there is  
98 - * no active session {@code null} is returned.  
99 - */  
100 - Principal getUser();  
101 -  
102 - void setUser(Principal principal);  
103 -  
104 - String getToken();  
105 -  
106 - void setToken(String token);  
107 -  
108 - void setRoles(Set<String> roles);  
109 -  
110 - void setPermission(Map<String, String> permissions);  
111 -  
112 - Set<String> getResources(String operation);  
113 -  
114 - Set<String> getOperations(String resources);  
115 -  
116 -}  
security/src/main/java/org/demoiselle/jee/security/Token.java 0 → 100644
@@ -0,0 +1,37 @@ @@ -0,0 +1,37 @@
  1 +/*
  2 + * To change this license header, choose License Headers in Project Properties.
  3 + * To change this template file, choose Tools | Templates
  4 + * and open the template in the editor.
  5 + */
  6 +package org.demoiselle.jee.security;
  7 +
  8 +import java.security.Principal;
  9 +import javax.enterprise.context.RequestScoped;
  10 +
  11 +/**
  12 + *
  13 + * @author 70744416353
  14 + */
  15 +@RequestScoped
  16 +public class Token {
  17 +
  18 + private Principal principal;
  19 + private String key;
  20 +
  21 + public Principal getPrincipal() {
  22 + return principal;
  23 + }
  24 +
  25 + public void setPrincipal(Principal principal) {
  26 + this.principal = principal;
  27 + }
  28 +
  29 + public String getKey() {
  30 + return key;
  31 + }
  32 +
  33 + public void setKey(String key) {
  34 + this.key = key;
  35 + }
  36 +
  37 +}
security/src/main/java/org/demoiselle/jee/security/TokensManager.java
@@ -1,63 +0,0 @@ @@ -1,63 +0,0 @@
1 -/*  
2 - * Demoiselle Framework  
3 - * Copyright (C) 2010 SERPRO  
4 - * ----------------------------------------------------------------------------  
5 - * This file is part of Demoiselle Framework.  
6 - *  
7 - * Demoiselle Framework is free software; you can redistribute it and/or  
8 - * modify it under the terms of the GNU Lesser General Public License version 3  
9 - * as published by the Free Software Foundation.  
10 - *  
11 - * This program is distributed in the hope that it will be useful,  
12 - * but WITHOUT ANY WARRANTY; without even the implied warranty of  
13 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
14 - * GNU General Public License for more details.  
15 - *  
16 - * You should have received a copy of the GNU Lesser General Public License version 3  
17 - * along with this program; if not, see <http://www.gnu.org/licenses/>  
18 - * or write to the Free Software Foundation, Inc., 51 Franklin Street,  
19 - * Fifth Floor, Boston, MA 02110-1301, USA.  
20 - * ----------------------------------------------------------------------------  
21 - * Este arquivo é parte do Framework Demoiselle.  
22 - *  
23 - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou  
24 - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação  
25 - * do Software Livre (FSF).  
26 - *  
27 - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA  
28 - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou  
29 - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português  
30 - * para maiores detalhes.  
31 - *  
32 - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título  
33 - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>  
34 - * ou escreva para a Fundação do Software Livre (FSF) Inc.,  
35 - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.  
36 - */  
37 -package org.demoiselle.jee.security;  
38 -  
39 -import java.io.Serializable;  
40 -import java.security.Principal;  
41 -import java.util.Map;  
42 -import java.util.Set;  
43 -import org.demoiselle.jee.security.exception.AuthorizationException;  
44 -import org.demoiselle.jee.security.exception.NotLoggedInException;  
45 -  
46 -/**  
47 - * <p>  
48 - * Structure used to handle both authentication and authorizations mechanisms.  
49 - * </p>  
50 - *  
51 - * @author SERPRO  
52 - */  
53 -public interface TokensManager extends Serializable {  
54 -  
55 - Principal getUser(String token);  
56 -  
57 - String create(Principal user);  
58 -  
59 - void remove(String token);  
60 -  
61 - boolean validate(String token);  
62 -  
63 -}  
security/src/main/java/org/demoiselle/jee/security/annotations/LoggedIn.java 0 → 100644
@@ -0,0 +1,62 @@ @@ -0,0 +1,62 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +
  38 +package org.demoiselle.jee.security.annotations;
  39 +
  40 +import javax.interceptor.InterceptorBinding;
  41 +import java.lang.annotation.Inherited;
  42 +import java.lang.annotation.Retention;
  43 +import java.lang.annotation.Target;
  44 +
  45 +import static java.lang.annotation.ElementType.METHOD;
  46 +import static java.lang.annotation.ElementType.TYPE;
  47 +import static java.lang.annotation.RetentionPolicy.RUNTIME;
  48 +
  49 +/**
  50 + * <p>
  51 + * Indicates that a specific permission is required in order to invocate the annotated method or class.
  52 + * </p>
  53 + *
  54 + * @author SERPRO
  55 + */
  56 +
  57 +@Inherited
  58 +@InterceptorBinding
  59 +@Target({ METHOD, TYPE })
  60 +@Retention(RUNTIME)
  61 +public @interface LoggedIn {
  62 +}
security/src/main/java/org/demoiselle/jee/security/annotations/RequiredPermission.java 0 → 100644
@@ -0,0 +1,65 @@ @@ -0,0 +1,65 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package org.demoiselle.jee.security.annotations;
  38 +
  39 +import javax.enterprise.util.Nonbinding;
  40 +import javax.interceptor.InterceptorBinding;
  41 +import java.lang.annotation.Inherited;
  42 +import java.lang.annotation.Retention;
  43 +import java.lang.annotation.Target;
  44 +
  45 +import static java.lang.annotation.ElementType.METHOD;
  46 +import static java.lang.annotation.ElementType.TYPE;
  47 +import static java.lang.annotation.RetentionPolicy.RUNTIME;
  48 +
  49 +/**
  50 + * Indicates that a specific permission is required in order to invocate the annotated method or class.
  51 + *
  52 + * @author SERPRO
  53 + */
  54 +@Inherited
  55 +@InterceptorBinding
  56 +@Target({ METHOD, TYPE })
  57 +@Retention(RUNTIME)
  58 +public @interface RequiredPermission {
  59 +
  60 + @Nonbinding
  61 + String resource() default "";
  62 +
  63 + @Nonbinding
  64 + String operation() default "";
  65 +}
security/src/main/java/org/demoiselle/jee/security/annotations/RequiredRole.java 0 → 100644
@@ -0,0 +1,65 @@ @@ -0,0 +1,65 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package org.demoiselle.jee.security.annotations;
  38 +
  39 +import javax.enterprise.util.Nonbinding;
  40 +import javax.interceptor.InterceptorBinding;
  41 +import java.lang.annotation.Inherited;
  42 +import java.lang.annotation.Retention;
  43 +import java.lang.annotation.Target;
  44 +
  45 +import static java.lang.annotation.ElementType.METHOD;
  46 +import static java.lang.annotation.ElementType.TYPE;
  47 +import static java.lang.annotation.RetentionPolicy.RUNTIME;
  48 +
  49 +/**
  50 + * <p>
  51 + * Indicates that the annotated method or class requires the user to have one or more roles associated in order to be
  52 + * invocated.
  53 + * </p>
  54 + *
  55 + * @author SERPRO
  56 + */
  57 +@Inherited
  58 +@InterceptorBinding
  59 +@Target({ METHOD, TYPE })
  60 +@Retention(RUNTIME)
  61 +public @interface RequiredRole {
  62 +
  63 + @Nonbinding
  64 + String[] value();
  65 +}
security/src/main/java/org/demoiselle/jee/security/interceptor/LoggedInInterceptor.java
@@ -42,8 +42,8 @@ import javax.interceptor.AroundInvoke; @@ -42,8 +42,8 @@ import javax.interceptor.AroundInvoke;
42 import javax.interceptor.Interceptor; 42 import javax.interceptor.Interceptor;
43 import javax.interceptor.InvocationContext; 43 import javax.interceptor.InvocationContext;
44 import java.io.Serializable; 44 import java.io.Serializable;
45 -import org.demoiselle.jee.security.LoggedIn;  
46 -import org.demoiselle.jee.security.SecurityContext; 45 +import org.demoiselle.jee.security.annotations.LoggedIn;
  46 +import org.demoiselle.jee.security.interfaces.SecurityContext;
47 47
48 /** 48 /**
49 * <p> 49 * <p>
security/src/main/java/org/demoiselle/jee/security/interceptor/RequiredPermissionInterceptor.java
@@ -14,8 +14,8 @@ import static javax.sql.rowset.spi.SyncFactory.getLogger; @@ -14,8 +14,8 @@ import static javax.sql.rowset.spi.SyncFactory.getLogger;
14 import org.demoiselle.jee.core.annotation.Name; 14 import org.demoiselle.jee.core.annotation.Name;
15 import org.demoiselle.jee.core.util.ResourceBundle; 15 import org.demoiselle.jee.core.util.ResourceBundle;
16 import org.demoiselle.jee.core.util.Strings; 16 import org.demoiselle.jee.core.util.Strings;
17 -import org.demoiselle.jee.security.RequiredPermission;  
18 -import org.demoiselle.jee.security.SecurityContext; 17 +import org.demoiselle.jee.security.annotations.RequiredPermission;
  18 +import org.demoiselle.jee.security.interfaces.SecurityContext;
19 19
20 /** 20 /**
21 * <p> 21 * <p>
security/src/main/java/org/demoiselle/jee/security/interceptor/RequiredRoleInterceptor.java
@@ -15,8 +15,8 @@ import java.util.List; @@ -15,8 +15,8 @@ import java.util.List;
15 import java.util.logging.Logger; 15 import java.util.logging.Logger;
16 import javax.inject.Inject; 16 import javax.inject.Inject;
17 import org.demoiselle.jee.core.util.ResourceBundle; 17 import org.demoiselle.jee.core.util.ResourceBundle;
18 -import org.demoiselle.jee.security.RequiredRole;  
19 -import org.demoiselle.jee.security.SecurityContext; 18 +import org.demoiselle.jee.security.annotations.RequiredRole;
  19 +import org.demoiselle.jee.security.interfaces.SecurityContext;
20 20
21 /** 21 /**
22 * <p> 22 * <p>
security/src/main/java/org/demoiselle/jee/security/interfaces/SecurityContext.java 0 → 100644
@@ -0,0 +1,116 @@ @@ -0,0 +1,116 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package org.demoiselle.jee.security.interfaces;
  38 +
  39 +import java.io.Serializable;
  40 +import java.security.Principal;
  41 +import java.util.Map;
  42 +import java.util.Set;
  43 +import org.demoiselle.jee.security.exception.AuthorizationException;
  44 +import org.demoiselle.jee.security.exception.NotLoggedInException;
  45 +
  46 +/**
  47 + * <p>
  48 + * Structure used to handle both authentication and authorizations mechanisms.
  49 + * </p>
  50 + *
  51 + * @author SERPRO
  52 + */
  53 +public interface SecurityContext extends Serializable {
  54 +
  55 + /**
  56 + * Checks if a specific user is logged in.
  57 + *
  58 + * @return {@code true} if the user is logged in
  59 + */
  60 + boolean isLoggedIn();
  61 +
  62 + /**
  63 + * @throws NotLoggedInException if there is no user logged in a specific
  64 + * session
  65 + */
  66 + void checkLoggedIn();
  67 +
  68 + /**
  69 + * Checks if the logged user has permission to execute an specific operation
  70 + * on a specific resource.
  71 + *
  72 + * @param resource resource to be checked
  73 + * @param operation operation to be checked
  74 + * @return {@code true} if the user has the permission
  75 + * @throws AuthorizationException When the permission checking fails, this
  76 + * exception is thrown.
  77 + * @throws NotLoggedInException if there is no user logged in a specific
  78 + * session.
  79 + */
  80 + boolean hasPermission(String resource, String operation);
  81 +
  82 + /**
  83 + * Checks if the logged user has an specific role
  84 + *
  85 + * @param role role to be checked
  86 + * @return {@code true} if the user has the role
  87 + * @throws AuthorizationException When the permission checking fails, this
  88 + * exception is thrown.
  89 + * @throws NotLoggedInException if there is no user logged in a specific
  90 + * session.
  91 + */
  92 + boolean hasRole(String role);
  93 +
  94 + /**
  95 + * Return the user logged in the session.
  96 + *
  97 + * @return the user logged in a specific authenticated session. If there is
  98 + * no active session {@code null} is returned.
  99 + */
  100 + Principal getUser();
  101 +
  102 + void setUser(Principal principal);
  103 +
  104 + String getToken();
  105 +
  106 + void setToken(String token);
  107 +
  108 + void setRoles(Set<String> roles);
  109 +
  110 + void setPermission(Map<String, String> permissions);
  111 +
  112 + Set<String> getResources(String operation);
  113 +
  114 + Set<String> getOperations(String resources);
  115 +
  116 +}
security/src/main/resources/demoiselle-security-bundle.properties
@@ -1,130 +0,0 @@ @@ -1,130 +0,0 @@
1 -# Demoiselle Framework  
2 -# Copyright (C) 2010 SERPRO  
3 -# ----------------------------------------------------------------------------  
4 -# This file is part of Demoiselle Framework.  
5 -#  
6 -# Demoiselle Framework is free software; you can redistribute it and/or  
7 -# modify it under the terms of the GNU Lesser General Public License version 3  
8 -# as published by the Free Software Foundation.  
9 -#  
10 -# This program is distributed in the hope that it will be useful,  
11 -# but WITHOUT ANY WARRANTY; without even the implied warranty of  
12 -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
13 -# GNU General Public License for more details.  
14 -#  
15 -# You should have received a copy of the GNU Lesser General Public License version 3  
16 -# along with this program; if not, see <http://www.gnu.org/licenses/>  
17 -# or write to the Free Software Foundation, Inc., 51 Franklin Street,  
18 -# Fifth Floor, Boston, MA 02110-1301, USA.  
19 -# ----------------------------------------------------------------------------  
20 -# Este arquivo \u00E9 parte do Framework Demoiselle.  
21 -#  
22 -# O Framework Demoiselle \u00E9 um software livre; voc\u00EA pode redistribu\u00ED-lo e/ou  
23 -# modific\u00E1-lo dentro dos termos da GNU LGPL vers\u00E3o 3 como publicada pela Funda\u00E7\u00E3o  
24 -# do Software Livre (FSF).  
25 -#  
26 -# Este programa \u00E9 distribu\u00EDdo na esperan\u00E7a que possa ser \u00FAtil, mas SEM NENHUMA  
27 -# GARANTIA; sem uma garantia impl\u00EDcita de ADEQUA\u00C7\u00C3O a qualquer MERCADO ou  
28 -# APLICA\u00C7\u00C3O EM PARTICULAR. Veja a Licen\u00E7a P\u00FAblica Geral GNU/LGPL em portugu\u00EAs  
29 -# para maiores detalhes.  
30 -#  
31 -# Voc\u00EA deve ter recebido uma c\u00F3pia da GNU LGPL vers\u00E3o 3, sob o t\u00EDtulo  
32 -# "LICENCA.txt", junto com esse programa. Se n\u00E3o, acesse <http://www.gnu.org/licenses/>  
33 -# ou escreva para a Funda\u00E7\u00E3o do Software Livre (FSF) Inc.,  
34 -# 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.  
35 -  
36 -version=${project.version}  
37 -engine-on=Iniciando o Demoiselle Framework ${project.version} (Neo)  
38 -resource-not-found=Arquivo {0} n\u00E3o foi encontrado  
39 -key-not-found=A chave {0} n\u00E3o foi encontrada  
40 -ambiguous-strategy-resolution=Foi detectada ambiguidade da interface {0} com as seguintes implementa\u00E7\u00F5es\: {1}. Para resolver o conflito, defina explicitamente a implementa\u00E7\u00E3o no demoiselle.properties.  
41 -ambiguous-bean-resolution=Falha ao obter {0} pois foi detectada ambiguidade nas seguintes implementa\u00E7\u00F5es\: {1}  
42 -bean-not-found=Voc\u00EA est\u00E1 tentando obter um objeto n\u00E3o reconhecido pelo CDI via Beans.getReference({0})  
43 -store-not-found=O objeto do tipo [{0}] n\u00E3o pode ser armazenado no escopo indicado\: {1}  
44 -more-than-one-exceptionhandler-defined-for-same-class=Foi definido mais de um m\u00E9todo na classe {0} para tratar a exce\u00E7\u00E3o {1}  
45 -handling-exception=Tratando a exce\u00E7\u00E3o {0}  
46 -taking-off=O Demoiselle ${project.version} decolou  
47 -engine-off=Desligando os motores do Demoiselle ${project.version}  
48 -setting-up-bean-manager=BeanManager dispon\u00EDvel atrav\u00E9s do utilit\u00E1rio {0}  
49 -  
50 -user-transaction-lookup-fail=N\u00E3o foi encontrada nenhuma transa\u00E7\u00E3o com o nome {0} no contexto JNDI  
51 -transactional-execution=Execu\u00E7\u00E3o transacional de {0}  
52 -begin-transaction=Transa\u00E7\u00E3o iniciada  
53 -transaction-marked-rollback=Transa\u00E7\u00E3o marcada para rollback [{0}]  
54 -transaction-already-finalized=A transa\u00E7\u00E3o j\u00E1 havia sido finalizada  
55 -transaction-commited=Transa\u00E7\u00E3o finalizada com sucesso  
56 -transaction-rolledback=Transa\u00E7\u00E3o finalizada com rollback  
57 -  
58 -bootstrap.configuration.processing=Processando {0}  
59 -bootstrap-context-already-managed=O contexto {0} para o escopo {1} j\u00E1 foi adicionado  
60 -bootstrap-context-added=Adicionando o contexto {0} para o escopo {1}  
61 -  
62 -loading-configuration-class=Carregando a classe de configura\u00E7\u00E3o {0}  
63 -configuration-field-loaded={0}: {2}  
64 -configuration-attribute-is-mandatory=A configura\u00E7\u00E3o {0} \u00E9 obrigat\u00F3ria, mas n\u00E3o foi encontrada em {1}  
65 -configuration-name-attribute-cant-be-empty=A nota\u00E7\u00E3o @Name n\u00E3o pode estar em branco  
66 -configuration-generic-extraction-error=Ocorreu um erro durante a extra\u00E7\u00E3o do tipo {0} com o extrator {1}  
67 -configuration-dot-after-prefix=N\u00E3o \u00E9 necess\u00E1rio adicionar o ponto ap\u00F3s o prefixo para uma classe de configura\u00E7\u00E3o. \u00C9 recomendado que sejam retirados, pois poder\u00E3o causar erros em vers\u00F5es futuras do Framework.  
68 -configuration-key-not-found={0}\: [n\u00E3o encontrada]  
69 -configuration-extractor-not-found=N\u00E3o foi poss\u00EDvel encontrar a classe extratora para o atributo {0}. Implemente a interface {1} para criar sua classe extratora.  
70 -configuration-not-conversion=N\u00E3o \u00E9 poss\u00EDvel converter o valor {0} para o tipo {1}  
71 -  
72 -transaction-not-defined=Nenhuma transa\u00E7\u00E3o foi definida. Para utilizar @{0} \u00E9 preciso definir a propriedade frameworkdemoiselle.transaction.class com a estrat\u00E9gia de transa\u00E7\u00E3o desejada no arquivo demoiselle.properties  
73 -executing-all=Executando m\u00E9todos anotados com @{0}  
74 -custom-context-selected=Produzindo inst\u00E2ncia do contexto {0}  
75 -custom-context-was-activated=O contexto {0} foi ativado para o escopo {1}  
76 -custom-context-was-deactivated=O contexto {0} foi desativado para o escopo {1}  
77 -custom-context-already-activated=N\u00E3o foi poss\u00EDvel ativar o contexto {0}, o escopo {1} j\u00E1 est\u00E1 ativo no contexto {2}  
78 -custom-context-not-found=N\u00E3o foi encontrado um contexto gerenciado do tipo [{0}] para o escopo [{1}]  
79 -custom-context-manager-not-initialized=ContextManager n\u00E3o foi inicializado. Chame [initialize] ao capturar o evento [AfterBeanDiscovery] em uma extens\u00E3o CDI  
80 -  
81 -error-creating-new-instance-for=Error creating a new instance for "{0}"  
82 -executed-successfully={0} execultado com sucesso  
83 -must-declare-one-single-parameter=Voc\u00EA deve declarar um par\u00E2metro \u00FAnico em {0}  
84 -loading-default-transaction-manager=Carregando o gerenciador de transa\u00E7\u00E3o padr\u00E3o {0}  
85 -results-count-greater-page-size=Quantidade de resultados {0} \u00E9 maior que o tamanho da p\u00E1gina {1}  
86 -page-result=Resultado paginado [p\u00E1gina\={0}, total de resultados\={1}]  
87 -pagination-not-initialized=Pagina\u00E7\u00E3o n\u00E3o inicializada. Inicialize o sistema de pagina\u00E7\u00E3o definindo a p\u00E1gina atual ou o total de resultados ao menos uma vez na requisi\u00E7\u00E3o.  
88 -pagination-invalid-value=Valor inv\u00E1lido para paginador: [{0}].  
89 -page=P\u00E1gina [n\u00FAmero\={0}, tamanho\={1}]  
90 -processing=Processando\: {0}  
91 -processing-fail=Falha no processamento devido a uma exce\u00E7\u00E3o lan\u00E7ada pela aplica\u00E7\u00E3o  
92 -for= \ para\:  
93 -file-not-found=O arquivo {0} n\u00E3o foi encontrado  
94 -  
95 -adding-message-to-context=Adicionando uma mensagem no contexto: [{0}]  
96 -access-checking=Verificando permiss\u00E3o do usu\u00E1rio {0} para executar a a\u00E7\u00E3o {1} no recurso {2}  
97 -access-allowed=O usu\u00E1rio {0} acessou o recurso {2} com a a\u00E7\u00E3o {1}  
98 -access-denied=O usu\u00E1rio {0} n\u00E3o possui permiss\u00E3o para executar a a\u00E7\u00E3o {1} no recurso {2}  
99 -access-denied-ui=Voc\u00EA n\u00E3o est\u00E1 autorizado a executar a a\u00E7\u00E3o {1} no recurso {0}  
100 -authorizer-not-defined=Nenhuma regra de resolu\u00E7\u00E3o de permiss\u00F5es foi definida. Para utilizar @{0} \u00E9 preciso definir a propriedade frameworkdemoiselle.security.authorizer.class como regra de resolu\u00E7\u00E3o de permiss\u00F5es desejada no arquivo demoiselle.properties.  
101 -user-not-authenticated=Usu\u00E1rio n\u00E3o autenticado  
102 -invalid-credentials=Usu\u00E1rio ou senha inv\u00E1lidos  
103 -has-role-verification=Verificando se o usu\u00E1rio {0} possui a(s) role(s)\: {1}  
104 -does-not-have-role=Usu\u00E1rio {0} n\u00E3o possui a(s) role(s)\: {1}  
105 -does-not-have-role-ui=Para acessar este recurso \u00E9 necess\u00E1rio ser {0}  
106 -user-has-role=Usu\u00E1rio {0} possui a(s) role(s)\: {1}  
107 -  
108 -authenticator-not-defined=Nenhum mecanismo de autentica\u00E7\u00E3o foi definido. Para utilizar {0} \u00E9 preciso definir a propriedade frameworkdemoiselle.security.authenticator.class como mecanismo de autentica\u00E7\u00E3o desejado no arquivo demoiselle.properties.  
109 -  
110 -management-notification-attribute-changed=O atributo [{0}] da classe gerenciada [{1}] foi alterado  
111 -management-null-class-defined=O controlador de gerenciamento informado n\u00E3o pode ser [null]  
112 -management-abstract-class-defined=O controlador de gerenciamento [{0}] precisa ser uma classe concreta  
113 -management-no-annotation-found=Classe {0} precisa ser anotada com @ManagementController  
114 -management-invalid-property-no-getter-setter=Falha ao inicializar classe gerenciada {0}, n\u00E3o foi encontrado um m\u00E9todo get ou m\u00E9todo set para a propriedade {1}  
115 -management-invalid-property-as-operation=Falha ao inicializar classe gerenciada {0}, n\u00E3o \u00E9 poss\u00EDvel declarar uma propriedade cujo m\u00E9todo get ou set \u00E9 uma opera\u00E7\u00E3o  
116 -management-introspection-error=Erro ao ler atributos da classe gerenciada {0}  
117 -management-type-not-found=A classe gerenciada informada n\u00E3o existe\: {0}  
118 -management-invoke-error=Erro ao tentar invocar a opera\u00E7\u00E3o "{0}" da classe gerenciada, a opera\u00E7\u00E3o n\u00E3o foi encontrada  
119 -management-write-value-error=N\u00E3o foi poss\u00EDvel definir um valor para a propriedade {0}  
120 -management-read-value-error=N\u00E3o foi poss\u00EDvel ler o valor da propriedade {0}  
121 -management-debug-acessing-property=Acessando propriedade {0} da classe gerenciada {1}  
122 -management-debug-setting-property=Definindo novo valor para propriedade {0} da classe gerenciada {1}  
123 -management-debug-invoking-operation=Invocando opera\u00E7\u00E3o {0} da classe gerenciada {1}  
124 -management-debug-starting-custom-context=Levantando contexto {0} para executar comando na classe gerenciada {1}  
125 -management-debug-stoping-custom-context=Desligando contexto {0} para classe gerenciada {1}  
126 -management-debug-registering-managed-type=Registrando classe gerenciada [{0}]  
127 -management-debug-processing-management-extension=Processando extens\u00E3o de gerenciamento [{0}]  
128 -management-debug-removing-management-extension=Desativando extens\u00E3o de gerenciamento [{0}]  
129 -management-validation-constraint-violation=Ocorreu um erro de valida\u00E7\u00E3o na classe [{0}] ao definir um valor para a propriedade [{1}]\: [{2}]  
130 -management-validation-validator-not-found=Nenhum provedor de valida\u00E7\u00E3o de beans encontrado, as anota\u00E7\u00F5es de valida\u00E7\u00E3o n\u00E3o ser\u00E3o processadas  
security/src/main/resources/demoiselle.properties
security/src/main/resources/messages.properties 0 → 100644
@@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
  1 +adding-message-to-context=Adicionando uma mensagem no contexto: [{0}]
  2 +access-checking=Verificando permiss\u00e3o do usu\u00e1rio {0} para executar a a\u00e7\u00e3o {1} no recurso {2}
  3 +access-allowed=O usu\u00e1rio {0} acessou o recurso {2} com a a\u00e7\u00e3o {1}
  4 +access-denied=O usu\u00e1rio {0} n\u00e3o possui permiss\u00e3o para executar a a\u00e7\u00e3o {1} no recurso {2}
  5 +access-denied-ui=Voc\u00ea n\u00e3o est\u00e1 autorizado a executar a a\u00e7\u00e3o {1} no recurso {0}
  6 +authorizer-not-defined=Nenhuma regra de resolu\u00e7\u00e3o de permiss\u00f5es foi definida. Para utilizar @{0} \u00e9 preciso definir a propriedade frameworkdemoiselle.security.authorizer.class como regra de resolu\u00e7\u00e3o de permiss\u00f5es desejada no arquivo demoiselle.properties.
  7 +user-not-authenticated=Usu\u00e1rio n\u00e3o autenticado
  8 +invalid-credentials=Usu\u00e1rio ou senha inv\u00e1lidos
  9 +has-role-verification=Verificando se o usu\u00e1rio {0} possui a(s) role(s)\: {1}
  10 +does-not-have-role=Usu\u00e1rio {0} n\u00e3o possui a(s) role(s)\: {1}
  11 +does-not-have-role-ui=Para acessar este recurso \u00e9 necess\u00e1rio ser {0}
  12 +user-has-role=Usu\u00e1rio {0} possui a(s) role(s)\: {1}
0 \ No newline at end of file 13 \ No newline at end of file
ws/src/main/java/org/demoiselle/jee/ws/JaxRsFilter.java
@@ -44,6 +44,7 @@ public class JaxRsFilter implements ClientRequestFilter, ClientResponseFilter, C @@ -44,6 +44,7 @@ public class JaxRsFilter implements ClientRequestFilter, ClientResponseFilter, C
44 44
45 @Override 45 @Override
46 public void filter(ContainerRequestContext requestContext, ContainerResponseContext response) { 46 public void filter(ContainerRequestContext requestContext, ContainerResponseContext response) {
  47 + response.getHeaders().putSingle("Demoiselle", "3.0.0");
47 response.getHeaders().putSingle("Access-Control-Allow-Origin", "*"); 48 response.getHeaders().putSingle("Access-Control-Allow-Origin", "*");
48 response.getHeaders().putSingle("Access-Control-Allow-Methods", "OPTIONS, GET, POST, PUT, DELETE"); 49 response.getHeaders().putSingle("Access-Control-Allow-Methods", "OPTIONS, GET, POST, PUT, DELETE");
49 response.getHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type"); 50 response.getHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type");