[RESOLVIDO] Controle de acesso - Salvo no banco de dados [RESOLVIDO]

Não entendo muito esse negócio de Debug.

Seria isso?

"method"	 (id=83)	
	method	Method  (id=92)	
		annotationDefault	null	
		annotations	(id=283)	
		clazz	Class<T> (br.com.softsol.compresempre.controller.ProdutoEmpresaController) (id=86)	
		declaredAnnotations	LinkedHashMap<K,V>  (id=279)	
			accessOrder	false	
			entrySet	HashMap$EntrySet  (id=5483)	
			header	LinkedHashMap$Entry<K,V>  (id=5484)	
			keySet	null	
			loadFactor	0.75	
			modCount	2	
			size	2	
			table	HashMap$Entry<K,V>[16]  (id=5485)	
			threshold	12	
			values	HashMap$Values  (id=5486)	
		exceptionTypes	Class<T>[0]  (id=281)	
		genericInfo	null	
		methodAccessor	DelegatingMethodAccessorImpl  (id=265)	
			delegate	NativeMethodAccessorImpl  (id=284)	
		modifiers	1	
		name	"altera" (id=268)	
		override	false	
		parameterAnnotations	null	
		parameterTypes	Class<T>[1]  (id=272)	
		returnType	Class<T> (void) (id=276)	
			annotations	null	
			annotationType	null	
			cachedConstructor	null	
			classRedefinedCount	0	
			declaredAnnotations	null	
			declaredConstructors	null	
			declaredFields	null	
			declaredMethods	null	
			declaredPublicFields	null	
			declaredPublicMethods	null	
			enumConstantDirectory	null	
			enumConstants	null	
			genericInfo	null	
			lastRedefinedCount	0	
			name	"void" (id=327)	
			newInstanceCallerCache	null	
			publicConstructors	null	
			publicFields	null	
			publicMethods	null	
		root	Method  (id=277)	
		securityCheckCache	null	
		securityCheckTargetClassCache	null	
		signature	null	
		slot	6	
	resource	DefaultResourceClass  (id=262)	

Ou seria isso.

req	VRaptorRequest  (id=102)	
	extraParameters	Hashtable<K,V>  (id=207)	
	request	RequestFacade  (id=109)	
		request	Request  (id=111)	
			asyncContext	null	
			asyncSupported	Boolean  (id=181)	
				value	false	
			attributes	HashMap<K,V>  (id=183)	
				entrySet	HashMap$EntrySet  (id=5551)	
				keySet	null	
				loadFactor	0.75	
				modCount	489	
				size	54	
				table	HashMap$Entry<K,V>[128]  (id=5539)	
				threshold	96	
				values	null	
			authType	null	
			comet	false	
			connector	Connector  (id=184)	
			context	StandardContext  (id=169)	
			cookies	null	
			cookiesParsed	false	
			coyoteRequest	Request  (id=167)	
			event	null	
			facade	RequestFacade  (id=109)	
			filterChain	ApplicationFilterChain  (id=148)	
			formats	SimpleDateFormat[3]  (id=151)	
			inputBuffer	InputBuffer  (id=154)	
			inputStream	CoyoteInputStream  (id=159)	
			internalDispatcherType	DispatcherType  (id=161)	
			localAddr	null	
			locales	ArrayList<E>  (id=140)	
			localesParsed	true	
			localName	null	
			localPort	-1	
			mappingData	MappingData  (id=113)	
			notes	HashMap<K,V>  (id=115)	
			parameterMap	ParameterMap<K,V>  (id=121)	
			parametersParsed	true	
			parser	StringParser  (id=123)	
			parts	null	
			partsParseException	null	
			pathParameters	HashMap<K,V>  (id=125)	
			postData	(id=126)	
			reader	CoyoteReader  (id=128)	
			readOnlyAttributes	HashMap<K,V>  (id=131)	
			remoteAddr	null	
			remoteHost	null	
			remotePort	-1	
			requestDispatcherPath	MessageBytes  (id=135)	
			requestedSessionCookie	true	
			requestedSessionId	"37A25EAC75364AC5C80E62173FFF6980" (id=5515)	
			requestedSessionSSL	false	
			requestedSessionURL	false	
			response	Response  (id=5516)	
			secure	false	
			session	StandardSession  (id=5517)	
			sessionParsed	false	
			sslAttributesParsed	false	
			subject	null	
			URIConverter	null	
			userPrincipal	null	
			usingInputStream	false	
			usingReader	false	
			wrapper	StandardWrapper  (id=5518)	

Primeiro, você está confundindo os methods…

Existe o que chamamos de HTTP Methods que são os métodos (tipos de envio) do protocolo HTTP… Ou seja: GET, POST, PUT, DELETE e outros…

Existem os methods do java, que são métodos normais. Esse method que você está me mostrando é do interceptor, certo? Esse cara é o método que você está indo acessar com o interceptor. NADA a ver com os http methods…

Como eu disse: “Debuga e olha os valores dentro do request” ou seja: olhe o que está vindo dentro do HttpServletRequest, pois você quer pegar o http method usado nessa requisição. Algo me diz que está aqui…

Segundo, precisa aprender a debugar e a fazer log da sua aplicação, o tempo de desenvolvimento diminui MUITO!

-EDIT-
Terceiro, não adianta você me postar essa estrutura dos atributos. É para você olhar isso ai e descobrir o que fazer.

Desculpa ae,

Vcê tinha falado dessa anotação.

    @Audit(Feature.REMOVE)  

Fica mais fácil, porque eu so preciso diferenciar o que é inclusão, alteração ou removação?

Não. Use sem passar parâmetros mesmo.

é mais fácil você verificar se o método tem a anotação @Post ou se tem @Put, ou se tem @Delete

Cara, desculpe não entrar na conversa anteriormente, vi que você já fez bastante coisa.

Como um amigo aqui já disse não tenho dúvidas que seu sistema poderá ficar com as requisições mais lentas e você terá muita dificuldade em manter isso posteriormente.

O que você pode e deveria fazer é delegar essa funcionalidade para um sistema externo e lá criar seus relatórios bases exclusivas e acessos restritos.

Você poderia fazer isso utilizando um ESB e aplicar a Event Driven, ou seja, fazer com que seus interceptors enviarem de forma assincrona para ESB suas mensagens de log e ele se encarregará do resto, apartir dai você abre um leque gigante de soluções e tratamentos desta informação e não somente como LOG.

Outra coisa, da maneira como você está fazendo imagine que se algo acontecer com sua base ou essa transação de log falhar, toda sua requisição falhará e acredito que nenhum sistema deveria falha por causa de um log.

abs.

Poww brother,

Valeu, nunca é tarde para ajudar um colega.rsrs.

Você poderia me informar a documentação, para eu dar uma estudada, e implementar.

Gostei da ideia.

Obrigado.

Vc acha que mesmo sendo somente em três métodos, o sistema pode ficar lento?
Pq vamos precisar somente do log desses.

Valeu.

Isso tudo depende do volume de requisições e os servidores que serão utilizados na solução.

O que eu realmente não gosto é deixar o método dependente de uma operação que não está diretamente relacionada ao negócio. E como eu disse em caso de falha de gravação desse log, sua operação para.

Quanto a documentação você pode verificar o ESB da Mule soft, tem uma versão community. Todos os ESB seguem o mesmo padrão pois são desenvolvidos em cima dos patterns de integração, procure no google sobre o tema você vai encontrar muita coisa.

Procure também sobre a arquitetura SOA, todas essas ideias vem dela. Não esqueça SOA é o conceito e não ferramenta.

abs.

Tranquilo,

Vou estudar um pouco. To ligado, em SOA. Terminando esse projeto, vou ter tempo de estudar mais esses conceitos.
Onde eu trabalhava(IBTI) eles estão desenvolvendo, utilizando SOA.

Muito interessante!

Eu dei uma lida, sobre o ESB e o Event Driver.

E o que eu entendi foi.

Eu devo criar uma OUTRA APLICAÇÃO para tratar os logs.
E passar para ela, cuidar dessa parte.
Seria isso?

Valeus!

Sim isso mesmo.

Se você criar essa aplicação com os moldes de log de mercado, você pode criar pequenos robos para análisar os logs e já dar solução/decisão sobre o que fazer com eles independente do seu sistema central, assim você pode usar essa aplicação de log para outros sistemas de sua empresa e ter isso centralizado facilitando a auditoria de todos eles.

abs.

Se vc for para uma solução assim, provavelmente vai cair em JMS (que é uma solução muito boa). Se vc estiver usando um servidor JEE, a ideia é boa, mas se estiver usando um container leve (tomcat, jetty… etc…), uma solução com ESB vai deixar tua aplicação inchada, desnecessariamente.

Se vc vai fazer isso como um experimento para aprendizado, ESB é uma boa.

Mas se pensar no problema, primeiramente, sem focar em tecnologia, vc falou que a informação seria usada uma vez por mês, e não no momento. Então vc precisa dela no teu banco de dados de produção? vc precisa dela num banco de dados?

Eu fiz uma solução para um problema semelhante ao teu… usando simplesmente uma thread separada da aplicação, que controlava a escrita em um arquivo txt. De madrugada quando o acesso diminuía… tinha um script que lia e extraia desse arquivo txt e jogado para um banco de dados leve (não o mesmo da produção), no caso o H2 (um ótimo banco de dados), e em cima desse banco eu podia fazer qualquer consulta.
Esse meu arquivo de log, no fim do dia, era comum ficar em torno de 200Mb.
E segundo testes de carga que fiz, essa solução não alterou praticamente nada a performance da aplicação.
Uma solução simples e eficiente.