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 | } |