Olá pessoal:
Estou tentando desenvolver um caso de uso “Efetuar Login”, utilizando o Struts2.
A idéia é, logo após submeter o formulário de login, o usuário (contendo nomeLogin e senha), é adicionado na sessão, via Interceptor --> para garantir.
A próxima página iria exibir o nomeLogin do usuário (é o que está pegando).
Alguém poderia emprestar seus conhecimentos e ajudar a desenvolver isto? o que iria contribuir muito para a comunidade GUJ, haja vista a enorme procura sobre material sobre struts2?
Criei as classes abaixo:
Usuario.java
package tutorial;
public class Usuario {
private String nomeLogin;
private String senha;
public String getNomeLogin() {
return nomeLogin;
}
public void setNomeLogin(String nomeLogin) {
this.nomeLogin = nomeLogin;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
}
AuthoriationInterceptor.java
package tutorial;
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class AuthoriationInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
public String intercept(ActionInvocation ai) throws Exception {
Map session = ai.getInvocationContext().getSession();
Usuario usuario = (Usuario) session.get( "usuario" );
if ( null != usuario) {
Object o = ai.getAction();
if (o instanceof UsuarioAware) {
UsuarioAware action = (UsuarioAware) o;
action.setUsuario(usuario);
}
return ai.invoke();
}else{
return Action.LOGIN;
}
}
}
AuthorizatedAccess.java
package tutorial;
import com.opensymphony.xwork2.ActionSupport;
public class AuthorizatedAccess extends ActionSupport implements UsuarioAware{
private static final long serialVersionUID = 1L;
private Usuario usuario;
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this .usuario = usuario;
}
public String execute() {
return SUCCESS;
}
}
UsuarioAware.java
package tutorial;
public interface UsuarioAware {
void setUsuario(Usuario usuario);
}
Login.java
package tutorial;
import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;
public class Login extends ActionSupport implements SessionAware{
private Usuario usuario;
private Map session;
private static final long serialVersionUID = 1L;
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public Map getSession() {
return session;
}
public void setSession(Map session) {
this .session = session;
}
@Override
public String execute() {
session.put("usuario",usuario);
return SUCCESS;
}
}
Criei o struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file ="struts-default.xml"/>
<package name ="default" extends ="struts-default">
<interceptors>
<interceptor name ="auth" class ="tutorial.AuthorizationInterceptor"/>
</interceptors>
<action name ="Login" class ="tutorial.AuthorizatedAccess">
<interceptor-ref name ="auth"/>
<result name ="login">/Login.jsp</result>
<result name ="success">/ShowUser.jsp</result>
</action>
</package>
</struts>
Alterei o web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID"
version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>AbstractInterceptor</display-name>
<!-- configuração do struts-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
Criei a página Login.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1> Login </h1>
Please select a role below:
<s:form action ="Login">
<s:textfield key="nomeLogin" label="Usuário"></s:textfield>
<s:password key="senha" label="Senha"></s:password>
<s:submit/>
</s:form >
</body>
</html>
Criei a página ShowUser.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%= session.getId() %>
</body>
</html>
Quando rodo o aplicativo --> tudo funciona beleza
O problema é que não estou conseguindo “pegar”, dentro da página ShowUser.jsp, os atributos nomeLogin e senha (parece que não consigo “ver” o objeto usuário que foi adicionado na sessão), mesmo utilizando <s:property value=“usuario.nomeLogin”/>, que deveria funcionar…
A galera menos experiente agradece.
Viva o GUJ.