/*
* $Id: IWJAASAuthenticationRequestWrapper.java,v 1.6 2006/05/13 13:29:04 tryggvil Exp $
* Created on 3.11.2004
*
* Copyright (C) 2004 Idega Software hf. All Rights Reserved.
*
* This software is the proprietary information of Idega hf.
* Use is subject to license terms.
*/
package com.idega.core.accesscontrol.jaas;
import java.security.Principal;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpSession;
import com.idega.core.accesscontrol.business.LoggedOnInfo;
import com.idega.core.accesscontrol.business.LoginBusinessBean;
import com.idega.core.appserver.AppServer;
import com.idega.idegaweb.IWMainApplication;
/**
*
* HttpServletRequestWrapper that overwrites methods used by JAAS and makes it look
* like user is logged on JAAS if he is logged on IdegaWeb. If the user is logged on
* JAAS then the methods use the super implementation.
*
* Last modified: $Date: 2006/05/13 13:29:04 $ by $Author: tryggvil $
*
* @author <a href="mailto:gummi@idega.com">Gudmundur Agust Saemundsson</a>
* @version $Revision: 1.6 $
*/
public class IWJAASAuthenticationRequestWrapper extends HttpServletRequestWrapper {
private Set<String> userRoles = null;
private Principal userPrincipal = null;
/**
* @param arg0
*/
public IWJAASAuthenticationRequestWrapper(HttpServletRequest request) {
super(request);
Principal user = super.getUserPrincipal();
LoginBusinessBean loginBean = LoginBusinessBean.getLoginBusinessBean(request);
if( user == null && loginBean.isLoggedOn(request)){
//log on as user.getName()
HttpSession session = request.getSession();
LoggedOnInfo lInfo = loginBean.getLoggedOnInfo(session);
this.userPrincipal = new IWUserPrincipal(lInfo == null ? null : lInfo.getLogin());
if (lInfo != null) {
this.userRoles = lInfo.getUserRoles();
}
}
}
@Override
public Principal getUserPrincipal(){
return (this.userPrincipal!=null)?this.userPrincipal:super.getUserPrincipal(); // new IWUserPrincipal("root"); //
}
@Override
public String getRemoteUser(){
return (this.userPrincipal!=null)?this.userPrincipal.getName():super.getRemoteUser();
}
@Override
public boolean isUserInRole(String role){
boolean inIWSystem = (this.userRoles != null)?this.userRoles.contains(role):false;
return inIWSystem || super.isUserInRole(role);
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpServletRequestWrapper#getPathInfo()
*/
@Override
public String getPathInfo() {
String superPathInfo = super.getPathInfo();
if(superPathInfo==null){
IWMainApplication iwma = IWMainApplication.getIWMainApplication(this.getSession().getServletContext());
AppServer appServer = iwma.getApplicationServer();
if(appServer.getVendor().startsWith("Oracle")){
return "/";
}
}
return superPathInfo;
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpServletRequestWrapper#getPathTranslated()
*/
@Override
public String getPathTranslated() {
// TODO Auto-generated method stub
return super.getPathTranslated();
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpServletRequestWrapper#getRequestURI()
*/
@Override
public String getRequestURI() {
// TODO Auto-generated method stub
return super.getRequestURI();
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpServletRequestWrapper#getRequestURL()
*/
@Override
public StringBuffer getRequestURL() {
// TODO Auto-generated method stub
return super.getRequestURL();
}
}