Struts+controller

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?

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" />

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

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=&quot;/scs/testeAction&quot; roles=&quot;user,admin&quot; /&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 &quot;conf/tomcat-users.xml&quot;
    &lt;/description&gt;
    &lt;role-name&gt;admin&lt;/role-name&gt;
  &lt;/security-role&gt;

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

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

[code]
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
{
protected boolean processPreprocess(HttpServletRequest request, HttpServletResponse response)
{
HttpSession session = request.getSession(true);
String usuario = (String) session.getAttribute("user");
if (usuario != null && usuario.equals("ricardo"))
{
return true;
}

	//		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;

}[/code]

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 ? :smiley:

valeu Ricardo…era isso que queria…!

muito grato…

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

ficaria mais simples

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

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?

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

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();