Prezados,
voltei para a Valve… Acho que estou bem perto! Não está dando mais erro de compilação rsrsrs…
Criei uma classe Valve, alterei meu “server.xml”, mas, aparentemente, minha Valve não está sendo acionada, pois tem alguns registros de “Log” dentro dela e não tá saindo nada no log do Tomcat.
Como faço pra sair os logs???
Será que não está saindo log pq ela não está sendo acionada?
Minha Classe, baseada nessa fonte esta abaixo… (http://marvinsmutterings.blogspot.com.br/2010/02/fixing-session-fixation-in-liferay-on.html)
===========
package aspprev.valves;
import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.ServletException;
import org.apache.catalina.Session;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
import org.apache.catalina.valves.ValveBase;
import org.apache.juli.logging.Log;
public class FixSessionFixationValve extends ValveBase {
private static final String INFO = "be.belgacom.enable.security.FixSessionFixationValve/1.0";
private String parameterName = null;
private String value = null;
@Override
public String getInfo() {
return INFO;
}
public String getParameterName() {
return parameterName;
}
public void setParameterName(String parameterName) {
this.parameterName = parameterName;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@SuppressWarnings("unchecked")
public void invoke(Request request, Response response) throws IOException, ServletException {
String param = request.getParameter(getParameterName());
if (param != null && getValue().equals(param)) {
Log logger = container.getLogger();
// Save old session
Session oldSession = request.getSessionInternal(true);
Map<String, Object> oldAttribs = new HashMap<String, Object>();
Map<String, Object> oldNotes = new HashMap<String, Object>();
if (logger.isDebugEnabled())
logger.debug("Old session ID: " + oldSession.getId());
// Save HTTP session data
Enumeration names = oldSession.getSession().getAttributeNames();
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
oldAttribs.put(name, oldSession.getSession().getAttribute(name));
}
// Save Tomcat internal session data
Iterator it = oldSession.getNoteNames();
while (it.hasNext()) {
String name = (String) it.next();
oldNotes.put(name, oldSession.getNote(name));
}
// Invalidate old session
request.getSession(true).invalidate();
request.setRequestedSessionId(null);
request.clearCookies();
// Create a new session and set it to the request
Session newSession = request.getSessionInternal(true);
request.setRequestedSessionId(newSession.getId());
if (logger.isDebugEnabled())
logger.debug("New session ID: " + newSession.getId());
// Copy data pointer from the old session to the new one. Restore HTTP session data
for (String name : oldAttribs.keySet()) {
newSession.getSession().setAttribute(name, oldAttribs.get(name));
}
// Restore Tomcat internal session data
for (String name : oldNotes.keySet()) {
newSession.setNote(name, oldNotes.get(name));
}
}
getNext().invoke(request, response);
}
}
Meu Arquivo "server.xml"
<?xml version=‘1.0’ encoding=‘utf-8’?>
<Server port=“8005” shutdown=“SHUTDOWN”>
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8081" protocol="HTTP/1.1" redirectPort="8081" enableLookups="false" server="Undefined" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="443" />
<Engine name="Catalina" defaultHost="localhost">
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Valve className="aspprev.valves.FixSessionFixationValve" />
<Valve className="org.apache.catalina.valves.AccessLogValve" prefix="AccessLogValve." suffix=".txt" pattern="common" resolveHosts="false"/>
</Host>
</Engine>
</Service>
</Server>
Meu arquivo Context.xml
<?xml version=‘1.0’ encoding=‘utf-8’?>
<Context useHttpOnly=“true”>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
Bom… conseguindo fazer aparecer os “logs” já é um grande passo, pois aí eu vou conseguir debugar e ver o que está acontecendo…
Desde já, agradeço a atenção de todos.
Rafael Franco