Commit edecdf07a7240dbf798361f533148eed424bea47
1 parent
ce216d26
Exists in
master
Melhoria nos filtros de autenticação
Showing
5 changed files
with
208 additions
and
134 deletions
Show diff stats
impl/core/src/main/resources/demoiselle-core-bundle.properties
@@ -17,112 +17,112 @@ | @@ -17,112 +17,112 @@ | ||
17 | # or write to the Free Software Foundation, Inc., 51 Franklin Street, | 17 | # or write to the Free Software Foundation, Inc., 51 Franklin Street, |
18 | # Fifth Floor, Boston, MA 02110-1301, USA. | 18 | # Fifth Floor, Boston, MA 02110-1301, USA. |
19 | # ---------------------------------------------------------------------------- | 19 | # ---------------------------------------------------------------------------- |
20 | -# Este arquivo é parte do Framework Demoiselle. | 20 | +# Este arquivo \ufffd parte do Framework Demoiselle. |
21 | # | 21 | # |
22 | -# O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
23 | -# modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | 22 | +# O Framework Demoiselle \ufffd um software livre; voc\ufffd pode redistribu\ufffd-lo e/ou |
23 | +# modific\ufffd-lo dentro dos termos da GNU LGPL vers\ufffdo 3 como publicada pela Funda\ufffd\ufffdo | ||
24 | # do Software Livre (FSF). | 24 | # do Software Livre (FSF). |
25 | # | 25 | # |
26 | -# Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
27 | -# GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
28 | -# APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | 26 | +# Este programa \ufffd distribu\ufffddo na esperan\ufffda que possa ser \ufffdtil, mas SEM NENHUMA |
27 | +# GARANTIA; sem uma garantia impl\ufffdcita de ADEQUA\ufffd\ufffdO a qualquer MERCADO ou | ||
28 | +# APLICA\ufffd\ufffdO EM PARTICULAR. Veja a Licen\ufffda P\ufffdblica Geral GNU/LGPL em portugu\ufffds | ||
29 | # para maiores detalhes. | 29 | # para maiores detalhes. |
30 | # | 30 | # |
31 | -# Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
32 | -# "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
33 | -# ou escreva para a Fundação do Software Livre (FSF) Inc., | 31 | +# Voc\ufffd deve ter recebido uma c\ufffdpia da GNU LGPL vers\ufffdo 3, sob o t\ufffdtulo |
32 | +# "LICENCA.txt", junto com esse programa. Se n\ufffdo, acesse <http://www.gnu.org/licenses/> | ||
33 | +# ou escreva para a Funda\ufffd\ufffdo do Software Livre (FSF) Inc., | ||
34 | # 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | 34 | # 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. |
35 | 35 | ||
36 | version=${project.version} | 36 | version=${project.version} |
37 | -engine-on=Iniciando o Demoiselle Framework ${project.version} | ||
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} | 37 | +engine-on=Iniciando o Demoiselle Framework ${project.version} (Malkovich) |
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 | 46 | taking-off=O Demoiselle ${project.version} decolou |
47 | engine-off=Desligando os motores do Demoiselle ${project.version} | 47 | engine-off=Desligando os motores do Demoiselle ${project.version} |
48 | -setting-up-bean-manager=BeanManager dispon\u00EDvel atrav\u00E9s do utilit\u00E1rio {0} | 48 | +setting-up-bean-manager=BeanManager dispon\u00edvel atrav\u00e9s do utilit\u00e1rio {0} |
49 | 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 | 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 | 57 | ||
58 | bootstrap.configuration.processing=Processando {0} | 58 | bootstrap.configuration.processing=Processando {0} |
59 | -bootstrap-context-already-managed=O contexto {0} para o escopo {1} j\u00E1 foi adicionado | 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} | 60 | bootstrap-context-added=Adicionando o contexto {0} para o escopo {1} |
61 | 61 | ||
62 | -loading-configuration-class=Carregando a classe de configura\u00E7\u00E3o {0} | 62 | +loading-configuration-class=Carregando a classe de configura\u00e7\u00e3o {0} |
63 | configuration-field-loaded={0}: {2} | 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} | 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 | 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} | 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} | 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} | 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 | 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 | 80 | ||
81 | error-creating-new-instance-for=Error creating a new instance for "{0}" | 81 | error-creating-new-instance-for=Error creating a new instance for "{0}" |
82 | executed-successfully={0} execultado com sucesso | 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 | -page=P\u00E1gina [n\u00FAmero\={0}, tamanho\={1}] | 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 | +page=P\u00e1gina [n\u00famero\={0}, tamanho\={1}] | ||
88 | processing=Processando\: {0} | 88 | processing=Processando\: {0} |
89 | -processing-fail=Falha no processamento devido a uma exce\u00E7\u00E3o lan\u00E7ada pela aplica\u00E7\u00E3o | 89 | +processing-fail=Falha no processamento devido a uma exce\u00e7\u00e3o lan\u00e7ada pela aplica\u00e7\u00e3o |
90 | for= \ para\: | 90 | for= \ para\: |
91 | -file-not-found=O arquivo {0} n\u00E3o foi encontrado | 91 | +file-not-found=O arquivo {0} n\u00e3o foi encontrado |
92 | 92 | ||
93 | adding-message-to-context=Adicionando uma mensagem no contexto: [{0}] | 93 | adding-message-to-context=Adicionando uma mensagem no contexto: [{0}] |
94 | -access-checking=Verificando permiss\u00E3o do usu\u00E1rio {0} para executar a a\u00E7\u00E3o {1} no recurso {2} | ||
95 | -access-allowed=O usu\u00E1rio {0} acessou o recurso {2} com a a\u00E7\u00E3o {1} | ||
96 | -access-denied=O usu\u00E1rio {0} n\u00E3o possui permiss\u00E3o para executar a a\u00E7\u00E3o {1} no recurso {2} | ||
97 | -access-denied-ui=Voc\u00EA n\u00E3o est\u00E1 autorizado a executar a a\u00E7\u00E3o {1} no recurso {0} | ||
98 | -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. | ||
99 | -user-not-authenticated=Usu\u00E1rio n\u00E3o autenticado | ||
100 | -invalid-credentials=Usu\u00E1rio ou senha inv\u00E1lidos | ||
101 | -has-role-verification=Verificando se o usu\u00E1rio {0} possui a(s) role(s)\: {1} | ||
102 | -does-not-have-role=Usu\u00E1rio {0} n\u00E3o possui a(s) role(s)\: {1} | ||
103 | -does-not-have-role-ui=Para acessar este recurso \u00E9 necess\u00E1rio ser {0} | ||
104 | -user-has-role=Usu\u00E1rio {0} possui a(s) role(s)\: {1} | 94 | +access-checking=Verificando permiss\u00e3o do usu\u00e1rio {0} para executar a a\u00e7\u00e3o {1} no recurso {2} |
95 | +access-allowed=O usu\u00e1rio {0} acessou o recurso {2} com a a\u00e7\u00e3o {1} | ||
96 | +access-denied=O usu\u00e1rio {0} n\u00e3o possui permiss\u00e3o para executar a a\u00e7\u00e3o {1} no recurso {2} | ||
97 | +access-denied-ui=Voc\u00ea n\u00e3o est\u00e1 autorizado a executar a a\u00e7\u00e3o {1} no recurso {0} | ||
98 | +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. | ||
99 | +user-not-authenticated=Usu\u00e1rio n\u00e3o autenticado | ||
100 | +invalid-credentials=Usu\u00e1rio ou senha inv\u00e1lidos | ||
101 | +has-role-verification=Verificando se o usu\u00e1rio {0} possui a(s) role(s)\: {1} | ||
102 | +does-not-have-role=Usu\u00e1rio {0} n\u00e3o possui a(s) role(s)\: {1} | ||
103 | +does-not-have-role-ui=Para acessar este recurso \u00e9 necess\u00e1rio ser {0} | ||
104 | +user-has-role=Usu\u00e1rio {0} possui a(s) role(s)\: {1} | ||
105 | 105 | ||
106 | -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. | 106 | +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. |
107 | 107 | ||
108 | management-notification-attribute-changed=O atributo [{0}] da classe gerenciada [{1}] foi alterado | 108 | management-notification-attribute-changed=O atributo [{0}] da classe gerenciada [{1}] foi alterado |
109 | -management-null-class-defined=O controlador de gerenciamento informado n\u00E3o pode ser [null] | 109 | +management-null-class-defined=O controlador de gerenciamento informado n\u00e3o pode ser [null] |
110 | management-abstract-class-defined=O controlador de gerenciamento [{0}] precisa ser uma classe concreta | 110 | management-abstract-class-defined=O controlador de gerenciamento [{0}] precisa ser uma classe concreta |
111 | management-no-annotation-found=Classe {0} precisa ser anotada com @ManagementController | 111 | management-no-annotation-found=Classe {0} precisa ser anotada com @ManagementController |
112 | -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} | ||
113 | -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 | 112 | +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} |
113 | +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 | ||
114 | management-introspection-error=Erro ao ler atributos da classe gerenciada {0} | 114 | management-introspection-error=Erro ao ler atributos da classe gerenciada {0} |
115 | -management-type-not-found=A classe gerenciada informada n\u00E3o existe\: {0} | ||
116 | -management-invoke-error=Erro ao tentar invocar a opera\u00E7\u00E3o "{0}" da classe gerenciada, a opera\u00E7\u00E3o n\u00E3o foi encontrada | ||
117 | -management-write-value-error=N\u00E3o foi poss\u00EDvel definir um valor para a propriedade {0} | ||
118 | -management-read-value-error=N\u00E3o foi poss\u00EDvel ler o valor da propriedade {0} | 115 | +management-type-not-found=A classe gerenciada informada n\u00e3o existe\: {0} |
116 | +management-invoke-error=Erro ao tentar invocar a opera\u00e7\u00e3o "{0}" da classe gerenciada, a opera\u00e7\u00e3o n\u00e3o foi encontrada | ||
117 | +management-write-value-error=N\u00e3o foi poss\u00edvel definir um valor para a propriedade {0} | ||
118 | +management-read-value-error=N\u00e3o foi poss\u00edvel ler o valor da propriedade {0} | ||
119 | management-debug-acessing-property=Acessando propriedade {0} da classe gerenciada {1} | 119 | management-debug-acessing-property=Acessando propriedade {0} da classe gerenciada {1} |
120 | management-debug-setting-property=Definindo novo valor para propriedade {0} da classe gerenciada {1} | 120 | management-debug-setting-property=Definindo novo valor para propriedade {0} da classe gerenciada {1} |
121 | -management-debug-invoking-operation=Invocando opera\u00E7\u00E3o {0} da classe gerenciada {1} | 121 | +management-debug-invoking-operation=Invocando opera\u00e7\u00e3o {0} da classe gerenciada {1} |
122 | management-debug-starting-custom-context=Levantando contexto {0} para executar comando na classe gerenciada {1} | 122 | management-debug-starting-custom-context=Levantando contexto {0} para executar comando na classe gerenciada {1} |
123 | management-debug-stoping-custom-context=Desligando contexto {0} para classe gerenciada {1} | 123 | management-debug-stoping-custom-context=Desligando contexto {0} para classe gerenciada {1} |
124 | management-debug-registering-managed-type=Registrando classe gerenciada [{0}] | 124 | management-debug-registering-managed-type=Registrando classe gerenciada [{0}] |
125 | -management-debug-processing-management-extension=Processando extens\u00E3o de gerenciamento [{0}] | ||
126 | -management-debug-removing-management-extension=Desativando extens\u00E3o de gerenciamento [{0}] | ||
127 | -management-validation-constraint-violation=Ocorreu um erro de valida\u00E7\u00E3o na classe [{0}] ao definir um valor para a propriedade [{1}]\: [{2}] | ||
128 | -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 | 125 | +management-debug-processing-management-extension=Processando extens\u00e3o de gerenciamento [{0}] |
126 | +management-debug-removing-management-extension=Desativando extens\u00e3o de gerenciamento [{0}] | ||
127 | +management-validation-constraint-violation=Ocorreu um erro de valida\u00e7\u00e3o na classe [{0}] ao definir um valor para a propriedade [{1}]\: [{2}] | ||
128 | +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 |
impl/extension/rest/src/main/java/br/gov/frameworkdemoiselle/security/AbstractHTTPAuthorizationFilter.java
@@ -36,9 +36,11 @@ | @@ -36,9 +36,11 @@ | ||
36 | */ | 36 | */ |
37 | package br.gov.frameworkdemoiselle.security; | 37 | package br.gov.frameworkdemoiselle.security; |
38 | 38 | ||
39 | +import static java.util.regex.Pattern.CASE_INSENSITIVE; | ||
39 | import static javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED; | 40 | import static javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED; |
40 | 41 | ||
41 | import java.io.IOException; | 42 | import java.io.IOException; |
43 | +import java.util.Enumeration; | ||
42 | import java.util.regex.Matcher; | 44 | import java.util.regex.Matcher; |
43 | import java.util.regex.Pattern; | 45 | import java.util.regex.Pattern; |
44 | 46 | ||
@@ -67,18 +69,52 @@ public abstract class AbstractHTTPAuthorizationFilter implements Filter { | @@ -67,18 +69,52 @@ public abstract class AbstractHTTPAuthorizationFilter implements Filter { | ||
67 | @Override | 69 | @Override |
68 | public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, | 70 | public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, |
69 | ServletException { | 71 | ServletException { |
70 | - | ||
71 | - RESTSecurityConfig config = Beans.getReference(RESTSecurityConfig.class); | ||
72 | - | ||
73 | - if (request instanceof HttpServletRequest && isActive(config) | ||
74 | - && isSupported(getAuthHeader((HttpServletRequest) request))) { | 72 | + |
73 | + if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) { | ||
74 | + doFilter((HttpServletRequest) request, (HttpServletResponse) response, chain); | ||
75 | + } else { | ||
76 | + chain.doFilter(request, response); | ||
77 | + } | ||
78 | + | ||
79 | + // boolean processed = false; | ||
80 | + // | ||
81 | + // if (request instanceof HttpServletRequest) { | ||
82 | + // HttpServletRequest httpRequest = (HttpServletRequest) request; | ||
83 | + // HttpServletResponse httpResponse = (HttpServletResponse) response; | ||
84 | + // | ||
85 | + // String authHeader = getAuthHeader(httpRequest); | ||
86 | + // String httpCredentials = extractCredentials(authHeader); | ||
87 | + // | ||
88 | + // RESTSecurityConfig config = Beans.getReference(RESTSecurityConfig.class); | ||
89 | + // if (isActive(config) && isSupported(httpCredentials)) { | ||
90 | + // processed = true; | ||
91 | + // | ||
92 | + // try { | ||
93 | + // performLogin(httpCredentials, httpRequest, httpResponse); | ||
94 | + // chain.doFilter(httpRequest, httpResponse); | ||
95 | + // performLogout(httpCredentials, httpRequest, httpResponse); | ||
96 | + // | ||
97 | + // } catch (InvalidCredentialsException cause) { | ||
98 | + // setUnauthorizedStatus(httpResponse, cause); | ||
99 | + // } | ||
100 | + // } | ||
101 | + // } | ||
102 | + // | ||
103 | + // if (!processed) { | ||
104 | + // chain.doFilter(request, response); | ||
105 | + // } | ||
106 | + } | ||
107 | + | ||
108 | + protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) | ||
109 | + throws IOException, ServletException { | ||
110 | + if (isActive() && isSupported(request)) { | ||
75 | try { | 111 | try { |
76 | - performLogin((HttpServletRequest) request); | ||
77 | - chain.doFilter((HttpServletRequest) request, (HttpServletResponse) response); | ||
78 | - performLogout(); | 112 | + performLogin(request, response); |
113 | + chain.doFilter(request, response); | ||
114 | + performLogout(request, response); | ||
79 | 115 | ||
80 | } catch (InvalidCredentialsException cause) { | 116 | } catch (InvalidCredentialsException cause) { |
81 | - setUnauthorizedStatus((HttpServletResponse) response, cause); | 117 | + setUnauthorizedStatus(response, cause); |
82 | } | 118 | } |
83 | 119 | ||
84 | } else { | 120 | } else { |
@@ -86,27 +122,54 @@ public abstract class AbstractHTTPAuthorizationFilter implements Filter { | @@ -86,27 +122,54 @@ public abstract class AbstractHTTPAuthorizationFilter implements Filter { | ||
86 | } | 122 | } |
87 | } | 123 | } |
88 | 124 | ||
89 | - private String getAuthHeader(HttpServletRequest request) { | ||
90 | - String result = request.getHeader("Authorization"); | ||
91 | - return (result == null ? request.getHeader("authorization") : result); | 125 | + protected String getAuthHeader(HttpServletRequest request) { |
126 | + String value = null; | ||
127 | + | ||
128 | + for (final Enumeration<String> names = request.getHeaderNames(); names.hasMoreElements();) { | ||
129 | + String name = names.nextElement(); | ||
130 | + | ||
131 | + if ("authorization".equalsIgnoreCase(name)) { | ||
132 | + value = request.getHeader(name); | ||
133 | + break; | ||
134 | + } | ||
135 | + } | ||
136 | + | ||
137 | + return value; | ||
138 | + } | ||
139 | + | ||
140 | + protected String getAuthData(HttpServletRequest request) throws InvalidCredentialsException { | ||
141 | + String authData = null; | ||
142 | + String authHeader = getAuthHeader(request); | ||
143 | + String type = getType(); | ||
144 | + | ||
145 | + if (!Strings.isEmpty(type) && !Strings.isEmpty(authHeader)) { | ||
146 | + String regexp = "^" + type + "[ \\n]+(.+)$"; | ||
147 | + Pattern pattern = Pattern.compile(regexp, CASE_INSENSITIVE); | ||
148 | + Matcher matcher = pattern.matcher(authHeader); | ||
149 | + | ||
150 | + if (matcher.matches()) { | ||
151 | + authData = matcher.group(1); | ||
152 | + } | ||
153 | + } | ||
154 | + | ||
155 | + return authData; | ||
92 | } | 156 | } |
93 | 157 | ||
94 | - protected abstract boolean isSupported(String authHeader); | 158 | + protected boolean isSupported(HttpServletRequest request) { |
159 | + String data = getAuthData(request); | ||
160 | + return !Strings.isEmpty(data); | ||
161 | + } | ||
95 | 162 | ||
96 | - protected abstract boolean isActive(RESTSecurityConfig config); | 163 | + protected abstract boolean isActive(); |
97 | 164 | ||
98 | - protected abstract void prepareForLogin(); | 165 | + protected abstract String getType(); |
99 | 166 | ||
100 | - private void performLogin(HttpServletRequest request) { | ||
101 | - prepareForLogin(); | 167 | + protected void performLogin(HttpServletRequest request, HttpServletResponse response) { |
102 | Beans.getReference(SecurityContext.class).login(); | 168 | Beans.getReference(SecurityContext.class).login(); |
103 | } | 169 | } |
104 | 170 | ||
105 | - protected abstract void prepareForLogout(); | ||
106 | - | ||
107 | - private void performLogout() { | 171 | + protected void performLogout(HttpServletRequest request, HttpServletResponse response) { |
108 | if (Beans.getReference(SecurityContext.class).isLoggedIn()) { | 172 | if (Beans.getReference(SecurityContext.class).isLoggedIn()) { |
109 | - prepareForLogout(); | ||
110 | Beans.getReference(SecurityContext.class).logout(); | 173 | Beans.getReference(SecurityContext.class).logout(); |
111 | } | 174 | } |
112 | } | 175 | } |
@@ -116,20 +179,4 @@ public abstract class AbstractHTTPAuthorizationFilter implements Filter { | @@ -116,20 +179,4 @@ public abstract class AbstractHTTPAuthorizationFilter implements Filter { | ||
116 | response.setContentType("text/plain"); | 179 | response.setContentType("text/plain"); |
117 | response.getWriter().write(cause.getMessage()); | 180 | response.getWriter().write(cause.getMessage()); |
118 | } | 181 | } |
119 | - | ||
120 | - protected static String extractCredentials(String type, String authHeader) throws InvalidCredentialsException { | ||
121 | - String result = null; | ||
122 | - | ||
123 | - if (!Strings.isEmpty(type) && !Strings.isEmpty(authHeader)) { | ||
124 | - String regexp = "^" + type + "[ \\n]+(.+)$"; | ||
125 | - Pattern pattern = Pattern.compile(regexp); | ||
126 | - Matcher matcher = pattern.matcher(authHeader); | ||
127 | - | ||
128 | - if (matcher.matches()) { | ||
129 | - result = matcher.group(1); | ||
130 | - } | ||
131 | - } | ||
132 | - | ||
133 | - return result; | ||
134 | - } | ||
135 | } | 182 | } |
impl/extension/rest/src/main/java/br/gov/frameworkdemoiselle/security/BasicAuthFilter.java
@@ -36,37 +36,36 @@ | @@ -36,37 +36,36 @@ | ||
36 | */ | 36 | */ |
37 | package br.gov.frameworkdemoiselle.security; | 37 | package br.gov.frameworkdemoiselle.security; |
38 | 38 | ||
39 | +import javax.servlet.http.HttpServletRequest; | ||
40 | +import javax.servlet.http.HttpServletResponse; | ||
41 | + | ||
39 | import org.apache.commons.codec.binary.Base64; | 42 | import org.apache.commons.codec.binary.Base64; |
40 | 43 | ||
41 | import br.gov.frameworkdemoiselle.util.Beans; | 44 | import br.gov.frameworkdemoiselle.util.Beans; |
42 | -import br.gov.frameworkdemoiselle.util.Strings; | ||
43 | 45 | ||
44 | public class BasicAuthFilter extends AbstractHTTPAuthorizationFilter { | 46 | public class BasicAuthFilter extends AbstractHTTPAuthorizationFilter { |
45 | 47 | ||
46 | private String credentials; | 48 | private String credentials; |
47 | 49 | ||
48 | @Override | 50 | @Override |
49 | - protected boolean isSupported(String authHeader) { | ||
50 | - credentials = extractCredentials("Basic", authHeader); | ||
51 | - return !Strings.isEmpty(credentials); | 51 | + protected String getType() { |
52 | + return "Basic"; | ||
52 | } | 53 | } |
53 | 54 | ||
54 | @Override | 55 | @Override |
55 | - protected boolean isActive(RESTSecurityConfig config) { | ||
56 | - return config.isBasicFilterActive(); | 56 | + protected boolean isActive() { |
57 | + return Beans.getReference(RESTSecurityConfig.class).isBasicFilterActive(); | ||
57 | } | 58 | } |
58 | 59 | ||
59 | @Override | 60 | @Override |
60 | - protected void prepareForLogin() { | 61 | + protected void performLogin(HttpServletRequest httpRequest, HttpServletResponse httpResponse) { |
61 | String[] basicCredentials = getCredentials(credentials); | 62 | String[] basicCredentials = getCredentials(credentials); |
62 | 63 | ||
63 | Credentials credentials = Beans.getReference(Credentials.class); | 64 | Credentials credentials = Beans.getReference(Credentials.class); |
64 | credentials.setUsername(basicCredentials[0]); | 65 | credentials.setUsername(basicCredentials[0]); |
65 | credentials.setPassword(basicCredentials[1]); | 66 | credentials.setPassword(basicCredentials[1]); |
66 | - } | ||
67 | 67 | ||
68 | - @Override | ||
69 | - protected void prepareForLogout() { | 68 | + super.performLogin(httpRequest, httpResponse); |
70 | } | 69 | } |
71 | 70 | ||
72 | private static String[] getCredentials(String header) throws InvalidCredentialsException { | 71 | private static String[] getCredentials(String header) throws InvalidCredentialsException { |
impl/extension/rest/src/main/java/br/gov/frameworkdemoiselle/security/Token.java
@@ -2,8 +2,6 @@ package br.gov.frameworkdemoiselle.security; | @@ -2,8 +2,6 @@ package br.gov.frameworkdemoiselle.security; | ||
2 | 2 | ||
3 | import javax.enterprise.context.RequestScoped; | 3 | import javax.enterprise.context.RequestScoped; |
4 | 4 | ||
5 | -import br.gov.frameworkdemoiselle.util.Strings; | ||
6 | - | ||
7 | @RequestScoped | 5 | @RequestScoped |
8 | public class Token { | 6 | public class Token { |
9 | 7 | ||
@@ -16,8 +14,12 @@ public class Token { | @@ -16,8 +14,12 @@ public class Token { | ||
16 | public void setValue(String value) { | 14 | public void setValue(String value) { |
17 | this.value = value; | 15 | this.value = value; |
18 | } | 16 | } |
19 | - | 17 | + |
20 | public boolean isEmpty() { | 18 | public boolean isEmpty() { |
21 | - return Strings.isEmpty(value); | 19 | + return this.value == null; |
20 | + } | ||
21 | + | ||
22 | + public void clear() { | ||
23 | + this.value = null; | ||
22 | } | 24 | } |
23 | } | 25 | } |
impl/extension/rest/src/main/java/br/gov/frameworkdemoiselle/security/TokenAuthFilter.java
@@ -36,29 +36,55 @@ | @@ -36,29 +36,55 @@ | ||
36 | */ | 36 | */ |
37 | package br.gov.frameworkdemoiselle.security; | 37 | package br.gov.frameworkdemoiselle.security; |
38 | 38 | ||
39 | +import java.io.IOException; | ||
40 | + | ||
41 | +import javax.servlet.FilterChain; | ||
42 | +import javax.servlet.ServletException; | ||
43 | +import javax.servlet.http.HttpServletRequest; | ||
44 | +import javax.servlet.http.HttpServletResponse; | ||
45 | + | ||
39 | import br.gov.frameworkdemoiselle.util.Beans; | 46 | import br.gov.frameworkdemoiselle.util.Beans; |
40 | -import br.gov.frameworkdemoiselle.util.Strings; | ||
41 | 47 | ||
42 | public class TokenAuthFilter extends AbstractHTTPAuthorizationFilter { | 48 | public class TokenAuthFilter extends AbstractHTTPAuthorizationFilter { |
43 | 49 | ||
44 | - private String token; | ||
45 | - | ||
46 | - protected boolean isSupported(String authHeader) { | ||
47 | - token = extractCredentials("Token", authHeader); | ||
48 | - return !Strings.isEmpty(token); | 50 | + @Override |
51 | + protected String getType() { | ||
52 | + return "Token"; | ||
49 | } | 53 | } |
50 | 54 | ||
51 | @Override | 55 | @Override |
52 | - protected boolean isActive(RESTSecurityConfig config) { | ||
53 | - return config.isTokenFilterActive(); | 56 | + protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) |
57 | + throws IOException, ServletException { | ||
58 | + String authData = getAuthData(request); | ||
59 | + | ||
60 | + super.doFilter(request, response, chain); | ||
61 | + | ||
62 | + String value = Beans.getReference(Token.class).getValue(); | ||
63 | + if (value != null && !value.equals(authData)) { | ||
64 | + response.setHeader("Set-Token", value); | ||
65 | + } | ||
54 | } | 66 | } |
55 | 67 | ||
56 | @Override | 68 | @Override |
57 | - protected void prepareForLogin() { | ||
58 | - Beans.getReference(Token.class).setValue(token); | 69 | + protected boolean isActive() { |
70 | + return Beans.getReference(RESTSecurityConfig.class).isTokenFilterActive(); | ||
59 | } | 71 | } |
60 | 72 | ||
61 | @Override | 73 | @Override |
62 | - protected void prepareForLogout() { | 74 | + protected void performLogin(HttpServletRequest request, HttpServletResponse response) { |
75 | + Token token = Beans.getReference(Token.class); | ||
76 | + String authData = getAuthData(request); | ||
77 | + token.setValue(authData); | ||
78 | + | ||
79 | + super.performLogin(request, response); | ||
63 | } | 80 | } |
81 | + | ||
82 | + // public void setHeader(@Observes AfterLoginSuccessful event) { | ||
83 | + // Token token = Beans.getReference(Token.class); | ||
84 | + // | ||
85 | + // if (!token.isEmpty()) { | ||
86 | + // HttpServletResponse response = Beans.getReference(HttpServletResponse.class); | ||
87 | + // response.setHeader("Set-Token", token.getValue()); | ||
88 | + // } | ||
89 | + // } | ||
64 | } | 90 | } |