public Map act(Redirector redirector,
SourceResolver resolver,
Map objectModel,
String source,
Parameters par) throws Exception {
if (this.getLogger().isDebugEnabled() == true) {
this.getLogger().debug("BEGIN act resolver="+resolver+
", objectModel="+objectModel+
", source="+source+
", par="+par);
}
final String handlerName = par.getParameter("handler", null);
if ( handlerName == null )
throw new ProcessingException("sunRise LoginAction requires at least the handler parameter.");
final Request request = ObjectModelHelper.getRequest( objectModel );
// build authentication parameters
SourceParameters authenticationParameters = new SourceParameters();
String[] enum = par.getNames();
if (enum != null) {
for(int i = 0; i < enum.length; i++) {
final String key = enum[i];
if ( key.startsWith("parameter_") ) {
String value = par.getParameter(key);
if ( value.startsWith("request:") ) {
value = request.getParameter( value.substring("request:".length()) );
if (value == null) value = "";
}
authenticationParameters.setParameter( key.substring("parameter_".length()),
value);
}
}
}
Map map = null;
// authenticate
SunRise sunRise = null;
try {
sunRise = (SunRise) this.manager.lookup(SunRise.ROLE);
Object o;
o = sunRise.authenticate( handlerName,
authenticationParameters);
if ( null == o) {
// success
map = sunRise.createMap();
} else {
request.setAttribute(Constants.REQUEST_ATTRIBUTE_FAILED_LOGIN + handlerName, o);
}
} finally {
this.manager.release(sunRise);
}
if (this.getLogger().isDebugEnabled() == true) {
this.getLogger().debug("END act map="+map);
}
return map;
}
|