diff --git a/jeeutil/pom.xml b/jeeutil/pom.xml index 43dbec1..a180a7b 100644 --- a/jeeutil/pom.xml +++ b/jeeutil/pom.xml @@ -20,6 +20,13 @@ + + log4j + log4j + 1.2.17 + jar + compile + javax javaee-api @@ -35,8 +42,8 @@ maven-compiler-plugin 2.3.2 - 1.6 - 1.6 + 1.7 + 1.7 ${endorsed.dir} diff --git a/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/AuthenticationFilter.java b/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/AuthenticationFilter.java new file mode 100644 index 0000000..c29f42c --- /dev/null +++ b/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/AuthenticationFilter.java @@ -0,0 +1,108 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package de.muehlencord.shared.jeeutil; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.io.PrintStream; +import java.io.PrintWriter; +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletOutputStream; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import org.apache.log4j.Level; +import org.apache.log4j.Logger; + +/** + * + * @author Jörn Mühlencord (joern@muehlencord.de + */ +public class AuthenticationFilter implements Filter { + + private final static Logger logger = Logger.getLogger(AuthenticationFilter.class.getName()); + private final static String USER = AuthenticationFilter.class.getName() + "_user"; + private String loginPage; + private String errorPage; + private FilterConfig filterConfig; + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + this.filterConfig = filterConfig; + if (filterConfig != null) { + errorPage = filterConfig.getInitParameter("error_page"); + loginPage = filterConfig.getInitParameter("login_page"); + } + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + + if ((loginPage == null) || (errorPage == null)) { + returnError(request, response, "AuthenticationFilter not properly configured! Contact Administrator."); + } + + User currentUser = null; + HttpSession session = ((HttpServletRequest) request).getSession(); + + if (session != null) { + if (session.getAttribute(USER) != null) { + currentUser = (User) session.getAttribute(USER); + } else { + logger.debug("No active session found - going to force login"); + filterConfig.getServletContext().getRequestDispatcher(loginPage).forward(request, response); + } + } else { + + if (currentUser == null) { + logger.debug("No logged in user found - going to force login"); + filterConfig.getServletContext().getRequestDispatcher(loginPage).forward(request, response); + } else { + logger.debug("User is authenticated, continue filter chain"); + // user is authenticated, continue with filter chain + chain.doFilter(request, response); + } + } + } + + @Override + public void destroy() { + this.filterConfig = null; + } + + private void returnError(ServletRequest request, ServletResponse response, String errorMsg) { + response.setContentType("text/html"); + + + try ( + ServletOutputStream servletOutputStream = response.getOutputStream(); + PrintStream ps = new PrintStream(servletOutputStream); + PrintWriter pw = new PrintWriter(ps)) { + + pw.print(""); + pw.print("Error"); + pw.print(""); + pw.print("

"); + pw.print(errorMsg); + pw.print("

"); + pw.print(""); + + } catch (Exception ex) { + logger.log(Level.ERROR, errorMsg, ex); + } + } + + static String readFirstLineFromFile(String path) throws IOException { + try (BufferedReader br = new BufferedReader(new FileReader(path))) { + return br.readLine(); + } + } +} diff --git a/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/Authenticator.java b/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/Authenticator.java new file mode 100644 index 0000000..56317d4 --- /dev/null +++ b/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/Authenticator.java @@ -0,0 +1,15 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package de.muehlencord.shared.jeeutil; + +/** + * + * @author jomu + */ +public interface Authenticator { + + public User getUser (); + +} diff --git a/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/User.java b/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/User.java new file mode 100644 index 0000000..8834a85 --- /dev/null +++ b/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/User.java @@ -0,0 +1,13 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package de.muehlencord.shared.jeeutil; + +/** + * + * @author jomu + */ +public class User { + +}