package de.interceptor;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import de.WebDataNames;
import de.core.SecurityManagerImpl;
import de.interfaces.SecurityManager;
import org.apache.struts2.StrutsStatics;
public class LoginInterceptor extends AbstractInterceptor implements StrutsStatics {
private static final long serialVersionUID = 1411315499641012294L;
private SecurityManager securityManager = new SecurityManagerImpl();
private static final String USERNAME = "username";
private static final String PASSWORD = "password";
public String intercept (ActionInvocation invocation) throws Exception {
final ActionContext context = invocation.getInvocationContext ();
HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);
HttpSession session = request.getSession (true);
Object user = session.getAttribute (WebDataNames.SESSION_USER_SESSSION_HANDLE);
if (user == null) {
String loginAttempt = request.getParameter (WebDataNames.LOGIN_ATTEMPT);
if (loginAttempt != null ) {
String username = request.getParameter (USERNAME);
String password = request.getParameter (PASSWORD);
if (!isValid(username) || !isValid(password)){
if (!isValid(username)){
addFieldError(invocation, USERNAME);
}
if(!isValid(password)){
addFieldError(invocation, PASSWORD);
}
} else {
if (tryLogin (username, password, session) ) {
return "login-success";
} else {
Object action = invocation.getAction ();
if (action instanceof com.opensymphony.xwork2.ActionSupport) {
ActionSupport as = ((com.opensymphony.xwork2.ActionSupport) action);
as.addActionError (as.getText("incorrect.user.data"));
}
}
}
}
return "login";
} else {
return invocation.invoke ();
}
}
private boolean isValid( String text){
if (text != null && !text.equals("")){
return true;
}
return false;
}
public void addFieldError(ActionInvocation invocation, String fieldName){
Object action = invocation.getAction ();
if (action instanceof com.opensymphony.xwork2.ActionSupport) {
ActionSupport va = ((com.opensymphony.xwork2.ActionSupport) action);
va.addFieldError(fieldName, va.getText(fieldName) + " " + va.getText("requiredstring"));
}
}
public boolean tryLogin(String username, String password, HttpSession session) {
Object user = securityManager.login (username, password, session);
if (user != null) {
session.setAttribute (WebDataNames.SESSION_USER_SESSSION_HANDLE, user);
return true;
} else {
return false;
}
}
}