hi all
we want to move the repeated query on our apps to become a interceptor, this
is our file
anyone can give the experience to me about this mode?
NB: the repeated query is a security purpose query, that validate every
user/role to access certain package in struts.xml
F
package org.blueoxygen.proto;
import java.util.ArrayList;
import java.util.List;
import org.apache.struts2.ServletActionContext;
import org.blueoxygen.cimande.descriptors.Descriptor;
import org.blueoxygen.cimande.modulefunction.ModuleFunction;
import org.blueoxygen.cimande.persistence.PersistenceAware;
import org.blueoxygen.cimande.persistence.PersistenceManager;
import org.blueoxygen.cimande.role.Role;
import org.blueoxygen.cimande.role.RolePrivilage;
import org.blueoxygen.cimande.role.RoleSite;
import org.blueoxygen.cimande.role.RoleSitePrivilage;
import org.blueoxygen.cimande.security.LoginFilter;
import org.blueoxygen.cimande.security.SessionCredentials;
import org.blueoxygen.cimande.security.SessionCredentialsAware;
import org.blueoxygen.cimande.security.User;
import org.blueoxygen.cimande.site.Site;
import org.blueoxygen.cimande.sitemanager.YUINavTreeLeaf;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class CimandeInterceptor implements Interceptor, PersistenceAware, SessionCredentialsAware {
private PersistenceManager manager;
private SessionCredentials sessCredentials;
private Site currentSite;
private Role currentRole;
private User currentUser;
private Descriptor descriptorCalled;
@Override
public void destroy() {
}
@Override
public void init() {
//init descriptorCalled
String requestUri = ServletActionContext.getRequest().getServletPath();
String descriptorName = requestUri.split("/")[2];
descriptorCalled = (Descriptor) manager.getByUniqueField(Descriptor.class, descriptorName, "name");
//init currentSite
String siteId = (String)ServletActionContext.getRequest().getSession().getAttribute(LoginFilter.LOGIN_CIMANDE_SITE);
currentSite = (Site) manager.getById(Site.class, siteId);
//init currentUser
currentUser = sessCredentials.getCurrentUser();
currentRole = currentUser.getRole();
}
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
if (!isAuthorized(actionInvocation)) {
return "notallowed";
}
return actionInvocation.invoke();
}
private boolean isAuthorized(ActionInvocation actionInvocation) {
boolean auth = false;
List<ModuleFunction> modules = new ArrayList<ModuleFunction>();
String mySQL = "FROM " + RoleSite.class.getName() + " tmp WHERE tmp.role.id='"+currentRole.getId()+"' AND tmp.site.id='"+currentSite.getId()+"'";
List<RoleSite> temp = new ArrayList<RoleSite>();
temp = manager.getList(mySQL,null,null);
int total_role_site = temp.size();
if (total_role_site > 0) {
// read all module function from role_site_privilage.
mySQL = "FROM tmp in " + RoleSitePrivilage.class + " WHERE tmp.roleSite.site.id = '" + currentSite.getId() + "' AND tmp.roleSite.role.id = '" + currentRole.getId() + "' ORDER BY (tmp.moduleFunction.description)";
List<RoleSitePrivilage> rsp = new ArrayList<RoleSitePrivilage>();
rsp = (List<RoleSitePrivilage>)manager.getList(mySQL,null,null);
for(RoleSitePrivilage tmp : rsp){
modules.addAll(getLeafPrivilage(tmp.getModuleFunction()));
}
} else {
// read all module function from role_privilage
mySQL = "FROM tmp in " + RolePrivilage.class + " WHERE tmp.role.id='" + currentRole.getId() + "' ORDER BY (tmp.moduleFunction.description)";
List<RolePrivilage> rp = new ArrayList<RolePrivilage>();
rp = (List<RolePrivilage>)manager.getList(mySQL,null,null);
for(RolePrivilage tmp : rp){
modules.addAll(getLeafPrivilage(tmp.getModuleFunction()));
}
}
for(ModuleFunction module : modules){
if(descriptorCalled.equals(module.getModuleDescriptor())){
return true;
}
}
return false;
}
private List<ModuleFunction> getLeafPrivilage(ModuleFunction parent){
List<ModuleFunction> mfs = new ArrayList<ModuleFunction>();
for(ModuleFunction mf : parent.getModuleFunctions()){
if(mf.getModuleFunctions().size() <= 0){
mfs.add(mf);
} else {
mfs.addAll(getLeafPrivilage(mf));
}
}
return parent.getModuleFunctions();
}
@Override
public void setPersistenceManager(PersistenceManager arg0) {
this.manager = arg0;
}
@Override
public void setSessionCredentials(SessionCredentials arg0) {
this.sessCredentials = arg0;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]