Struts+controller

10 respostas
A

Pessoal,

Estou começando a usar Struts e surgiu uma duvida como criar um controller para verificar se o usuario tem permissão a determinada tela.

Pois sem Struts eu tenho um controller que recebe todas as requisições e vejo se o usuario tem permissão ou não a determinadas telas ai redireciono o usuario a pagina requerida…

e no Struts qual a solução?

alguem poderia postar um exemplo?

10 Respostas

ricardolecheta

deixe o container cuidar disso pra vc, no seu web.xml habilite a segurança.

ai no struts-config.xml basta colocar as roles que possui acesso as actions. Desta forma o struts vai verificar se existe um usuario logado na aplicação com a role de “admin” …

<action path="/teste" roles="user,admin" />
A

Olá Ricardo,
no Struts a tag de Form é essa…e não tenho a possibilidade de colocar “roles”…

<html:form action="/cadastro">

vc tem algum exemplo do web.xml e do form que possa postar aqui?

valeu

ricardolecheta

neste exemplo eu coloquei como um caminho protegido o /scs/*, isto significa que tudo será barrado pelo container se tiver este caminho…

entao uma action definida como:

&lt;action path="/scs/testeAction" roles="user,admin" /&gt;

será barrada pelo container… ai caso seu usuario estiver autenticado o struts deixa vc acessar a página…

para testar, caso esteja utilizando o tomcat, coloca alguns usuarios e umas roloes no arquivo do tomcat em tomcat/conf/tomcat-users.xml …

&lt;security-constraint&gt;
    &lt;web-resource-collection&gt;
      &lt;web-resource-name&gt;Web Application&lt;/web-resource-name&gt;
      &lt;url-pattern&gt;/scs/*&lt;/url-pattern&gt;
    &lt;/web-resource-collection&gt;
    &lt;auth-constraint&gt;
    &lt;role-name&gt;admin&lt;/role-name&gt;
      &lt;role-name&gt;user&lt;/role-name&gt;
    &lt;/auth-constraint&gt;
  &lt;/security-constraint&gt;

&lt;login-config&gt;
    &lt;auth-method&gt;BASIC&lt;/auth-method&gt;
    &lt;realm-name&gt;Tomcat Supported Realm&lt;/realm-name&gt;
  &lt;/login-config&gt;

&lt;security-role&gt;
    &lt;description&gt;
      Role de usuario
    &lt;/description&gt;
    &lt;role-name&gt;user&lt;/role-name&gt;
  &lt;/security-role&gt;
  &lt;security-role&gt;
    &lt;description&gt;
      An example role defined in "conf/tomcat-users.xml"
    &lt;/description&gt;
    &lt;role-name&gt;admin&lt;/role-name&gt;
  &lt;/security-role&gt;
ricardolecheta

eu acho que compliquei a tua vida :P , deixa eu te dar outra dica:

você pode sobrescrever o RequestProcessor do Struts, que é a classe que trata todas as requisições:
package struts.security;

import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class RequestProcessor extends org.apache.struts.action.RequestProcessor
&#123;
	protected boolean processPreprocess&#40;HttpServletRequest request, HttpServletResponse response&#41;
	&#123;
		HttpSession session = request.getSession&#40;true&#41;;
		String usuario = &#40;String&#41; session.getAttribute&#40;&quot;user&quot;&#41;;
		if &#40;usuario != null &amp;&amp; usuario.equals&#40;&quot;ricardo&quot;&#41;&#41;
		&#123;
			return true;
		&#125;

		//		response.sendError&#40;
		//			HttpServletResponse.SC_BAD_REQUEST,
		//			getInternal&#40;&#41;.getMessage&#40;&quot;notAuthorized&quot;, mapping.getPath&#40;&#41;&#41;&#41;;

		try
		&#123;
			response.sendRedirect&#40;&quot;notAuthorized.jsp&quot;&#41;;
		&#125;
		catch &#40;IOException e&#41;
		&#123;
			e.printStackTrace&#40;&#41;;
		&#125;

		return false;
	&#125;
&#125;
ai no struts-config.xml você precisa informar que agora o RequestProcessor será feito pela sua classe:
&lt;controller nocache=&quot;true&quot; processorClass=&quot;struts.security.RequestProcessor&quot; /&gt;

no exemplo eu mandei redirecionar para uma página padrao caso o usuario nao esteja logado.

pronto, tudo configurado.

Agora todas as requisições vão passar por esta classe e você retorna true/false caso o usuario deva ou nao acessar a página.
No exemplo que fiz eu recuperei a HttpSession e testei para ver se existia um usuario ricardo, se for este usuario retorna true, caso contrário redireciona e retorna false.

blz ? :D

A

valeu Ricardo…era isso que queria…!

muito grato…

urubatan

não é melhor fazer um filtro para isto??

ricardolecheta

ficaria mais simples

mas eu ainda fico com habilitar a segurança no web.xml…

A

Como seria se eu fosse criar um filtro…?

alguem poderia dar exemplo…?

E qual é a melhor solução para verificar se o usuario tem premissão a determinada pagina?

ricardolecheta

tem um tutorial aqui no guj:
http://www.guj.com.br/servlet/guj?PARSE=true&MAMUTE_ACTION=br.com.guj.action.ListTutorial&MAMUTE_TEMPLATE=ShowTutorial&LIST_TUTORIAL=single&TutorialId=11&PAGE=1

A

Pessoal não sei se um filtro ficaria legal nesta situação…

pois dentro do filtro eu vejo se o usuario está na sessão e vejo se ele tem direito a pagina a ser executada…mas com o Struts ela me retorna

cadastro.jsp e logo após cadastro.do.

ai tenho que mapear no banco de dados cadastro.jsp e cadastro.do …

será que estou certo?

estou pegando a url assim:
String path=((HttpServletRequest)request).getRequestURI();

Criado 28 de dezembro de 2003
Ultima resposta 30 de dez. de 2003
Respostas 10
Participantes 3