Hi richard,
I followed your suggestion and i rewrote my Spnego filter in this way :
public class XXXSpnegoHttpFilter extends AbstractMgnlFilter{
protected XXXHttpFilter wrappedFilter = null;
public void init(XXXFilterConfig config) throws ServletException{
super.init(config);
this.wrappedFilter = new SpnegoHttpFilter();
this.wrappedFilter.init(config);
}
public void doFilter(HttpServletRequest request, HttpServletResponse
response, FilterChain chain) throws IOException, ServletException {
init(new XXXFilterConfig());
wrappedFilter.doFilter(request, response, chain);
destroy();
}
public void destroy(){
if (wrappedFilter!=null) {
wrappedFilter.destroy();
}
wrappedFilter = null;
}
}
And I insert init() and destroy() in the followed filter I rewrote called
XXXLoginFilter :
package info.magnolia.module.authentication;
//Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
//Jad home page: http://www.kpdus.com/jad.html
//Decompiler options: packimports(3)
//Source File Name: LoginFilter.java
import info.magnolia.audit.AuditLoggingUtil;
import info.magnolia.cms.filters.AbstractMgnlFilter;
import info.magnolia.cms.security.auth.login.LoginFilter;
import info.magnolia.cms.security.auth.login.LoginHandler;
import info.magnolia.cms.security.auth.login.LoginResult;
import info.magnolia.context.Context;
import info.magnolia.context.MgnlContext;
import info.magnolia.monitoring.AccessRestrictedException;
import info.magnolia.monitoring.SystemMonitor;
import info.magnolia.objectfactory.Components;
import java.io.IOException;
import java.util.*;
import javax.security.auth.Subject;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import net.sourceforge.spnego.SpnegoHttpFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
//Referenced classes of package info.magnolia.cms.security.auth.login:
// LoginHandler, LoginResult
public class XXXLoginFilter extends AbstractMgnlFilter
{
protected SpnegoHttpFilter wrappedFilter = null;
public XXXLoginFilter()
{
loginHandlers = new ArrayList();
}
public void doFilter(HttpServletRequest request, HttpServletResponse response,
FilterChain chain) throws IOException, ServletException {
init(new XXXFilterConfig());
for( Iterator<LoginHandler> iter =
getLoginHandlers().iterator();iter.hasNext(); ) {
LoginHandler handler = iter.next() ;
LoginResult loginResult = handler.handle(request, response);
LoginResult.setCurrentLoginResult(loginResult);
AuditLoggingUtil.log(loginResult, request);
if(loginResult.getStatus() == 4)
return;
if(loginResult.getStatus() == 1)
{
if(((SystemMonitor)Components.getComponent(info.magnolia.monitoring.SystemMonitor.class)).isMemoryLimitReached())
{
String memoryLimitReachedMessage = String.format("Your server
is currently low on memory. %s. Please try again later or contact your
administrator if this happens frequently.", new Object[] {
"That is why further logins have to be blocked for now."
});
log.error(memoryLimitReachedMessage);
LoginResult.setCurrentLoginResult(new LoginResult(2, new
AccessRestrictedException()));
} else
{
Subject subject = loginResult.getSubject();
if(subject == null)
{
log.error((new StringBuilder()).append("Invalid login
result from handler [").append(handler.getClass().getName()).append("] returned
STATUS_SUCCEEDED but no subject").toString());
throw new ServletException("Invalid login result");
}
if(request.getSession(false) != null)
request.getSession().invalidate();
MgnlContext.login(subject);
/* my code*/
}
AuditLoggingUtil.log(loginResult, request);
}
}
AuditLoggingUtil.log(loginResult, request);
}
chain.doFilter(request, response);
destroy();
}
public Collection getLoginHandlers()
{
return loginHandlers;
}
public void setLoginHandlers(Collection loginHandlers)
{
this.loginHandlers = loginHandlers;
}
public void addLoginHandlers(LoginHandler handler)
{
loginHandlers.add(handler);
}
private static final Logger log =
LoggerFactory.getLogger(info.magnolia.cms.security.auth.login.LoginFilter.class);
private Collection loginHandlers;
public void init(UniqaFilterConfig config) throws ServletException{
super.init(config);
this.wrappedFilter = new SpnegoHttpFilter();
this.wrappedFilter.init(config);
}
public void destroy(){
if (wrappedFilter!=null){
wrappedFilter.destroy();
}
wrappedFilter = null;
}
}
and I obtain this exception probabilty because I couldn't understand very well
the way:
java.lang.NullPointerException
at
net.sourceforge.spnego.SpnegoHttpFilter.doFilter(SpnegoHttpFilter.java:229)
at
info.magnolia.module.authentication.UniqaSpnegoHttpFilter.doFilter(UniqaSpnegoHttpFilter.java:33)
at
info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:91)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
at
info.magnolia.enterprise.registration.RegistrationFilter.doFilter(RegistrationFilter.java:56)
at
info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:91)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:85)
at
info.magnolia.cms.filters.CosMultipartRequestFilter.doFilter(CosMultipartRequestFilter.java:91)
at
info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:61)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
Can you help me please?
Thank you in advance
Regards from Milan
Alberto Giovannone
--
Context is everything:
http://forum.magnolia-cms.com/forum/thread.html?threadId=be26f4c1-1b80-42bc-8de0-c51be72a9127
----------------------------------------------------------------
For list details, see http://www.magnolia-cms.com/community/mailing-lists.html
Alternatively, use our forums: http://forum.magnolia-cms.com/
To unsubscribe, E-mail to: <[email protected]>
----------------------------------------------------------------