src/java/de/uhilger/um/api/Api.java | ●●●●● patch | view | raw | blame | history | |
src/java/de/uhilger/um/api/UserMgr.java | ●●●●● patch | view | raw | blame | history | |
src/java/de/uhilger/um/pub/SessionManager.java | ●●●●● patch | view | raw | blame | history | |
src/java/de/uhilger/um/web/Initialiser.java | ●●●●● patch | view | raw | blame | history | |
web/WEB-INF/sql.properties | ●●●●● patch | view | raw | blame | history | |
web/WEB-INF/web.xml | ●●●●● patch | view | raw | blame | history |
src/java/de/uhilger/um/api/Api.java
New file @@ -0,0 +1,64 @@ package de.uhilger.um.api; import de.uhilger.baselink.PersistenceManager; import de.uhilger.baselink.Record; import de.uhilger.transit.web.RequestKontext; import de.uhilger.transit.web.WebKontext; import static de.uhilger.um.api.UserMgr.UM_DB; import java.util.Properties; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; /** * */ public abstract class Api implements WebKontext, RequestKontext { /** Zeiger zum Servlet-Kontext dieser Anwendung */ private ServletContext ctx; private HttpServletRequest request; protected PersistenceManager getDb() { return (PersistenceManager) ctx.getAttribute(UM_DB); } protected String getSql(String id) { Properties sql = (Properties) ctx.getAttribute(UserMgr.UM_SQL_PROPERTIES); return sql.getProperty(id); } protected Record getMapper(String mapperName) { Record record = null; Object o = getServletContext().getAttribute(mapperName); if(o instanceof Record) { record = (Record) o; } return record; } /* ------------- Implementierung WebKontext ------------- */ @Override public ServletContext getServletContext() { return ctx; } @Override public void setServletContext(ServletContext servletContext) { this.ctx = servletContext; } /* ------------- Implementierung RequestKontext ------------- */ @Override public HttpServletRequest getRequest() { return request; } @Override public void setRequest(HttpServletRequest r) { this.request = r; } } src/java/de/uhilger/um/api/UserMgr.java
@@ -59,14 +59,14 @@ * * @version 2, December 27, 2016 */ public class UserMgr implements WebKontext, RequestKontext { public class UserMgr extends Api /*implements WebKontext, RequestKontext*/ { private static final Logger logger = Logger.getLogger(UserMgr.class.getName()); /** Zeiger zum Servlet-Kontext dieser Anwendung */ private ServletContext ctx; //private ServletContext ctx; private HttpServletRequest request; //private HttpServletRequest request; /** Name, unter dem das Properties-Objekt mit den SQL-Befehlen im ServletContext hinterlegt ist */ public static final String UM_SQL_PROPERTIES = "umSqlProperties"; @@ -90,19 +90,24 @@ public static final String SQL_GET_USER_ROLES = "getUserRoles"; /** Referenz zum SQL-Befehl zum Loeschen aller Rollen eines Nutzers */ public static final String SQL_DELETE_USER_ROLES = "deleteUserRoles"; public static final String SQL_GET_USER_DATA = "getUserData"; public static final String MP_USER = "userMapper"; public static final String MP_USER_DATA = "userDataMapper"; public static final String MP_USER_ROLE = "userRoleMapper"; /** Mapper-Objekt fuer Benutzer */ private static final Record UserMapper = new GenericRecord(User.class); //private static final Record UserMapper = new GenericRecord(User.class); /** Mapper-Objekt fuer Benutzerdaten */ //private static final Record UserDataMapper = new GenericRecord(UserData.class); /** Mapper-Objekt fuer Benutzerrollen */ private static final Record UserRoleMapper = new GenericRecord(UserRole.class); //private static final Record UserRoleMapper = new GenericRecord(UserRole.class); /* ----------- Benutzer -------------- */ public User createUser(User user) throws ClassNotFoundException, InstantiationException, IllegalAccessException { String kw = user.getPw(); String digesterClassName = ctx.getInitParameter(P_DIGESTER); String digesterClassName = getServletContext().getInitParameter(P_DIGESTER); Digester digester = (Digester) Class.forName(digesterClassName).newInstance(); /* MD5 geht nicht mehr, @@ -110,7 +115,7 @@ */ String digestedPw = digester.digest(kw, Digester.SHA256, null); user.setPw(digestedPw); getDb().insert(user, UserMapper); getDb().insert(user, getMapper(MP_USER)); return user; } @@ -123,11 +128,11 @@ Connection c = pm.getConnection(); pm.startTransaction(c); pm.execute(c, getSql(SQL_DELETE_USER_ROLES), user.getId()); User deletedUser = (User) pm.delete(c, user, UserMapper); User deletedUser = (User) pm.delete(c, user, getMapper(MP_USER)); pm.commit(c); return deletedUser; } public String logout() { getRequest().getSession().invalidate(); return "logged out"; @@ -136,12 +141,12 @@ /* ------------ Rollen ------------------ */ public UserRole grantRole(UserRole role) { getDb().insert(role, UserRoleMapper); getDb().insert(role, getMapper(MP_USER_ROLE)); return role; } public UserRole revokeRole(UserRole role) { getDb().delete(role, UserRoleMapper); getDb().delete(role, getMapper(MP_USER_ROLE)); return role; } @@ -167,6 +172,7 @@ * @param id Name des gewuenschten SQL-Kommandos * @return das SQL-Kommando mit der in id angegebenen Bezeichnung */ /* private String getSql(String id) { Properties sql = (Properties) ctx.getAttribute(UserMgr.UM_SQL_PROPERTIES); return sql.getProperty(id); @@ -176,8 +182,18 @@ return (PersistenceManager) ctx.getAttribute(UM_DB); } private Record getMapper(String mapperName) { Record record = null; Object o = getServletContext().getAttribute(mapperName); if(o instanceof Record) { record = (Record) o; } return record; } */ /* ------------- Implementierung WebKontext ------------- */ /* @Override public ServletContext getServletContext() { return ctx; @@ -187,9 +203,11 @@ public void setServletContext(ServletContext servletContext) { this.ctx = servletContext; } */ /* ------------- Implementierung RequestKontext ------------- */ /* @Override public HttpServletRequest getRequest() { return request; @@ -199,6 +217,6 @@ public void setRequest(HttpServletRequest r) { this.request = r; } */ } src/java/de/uhilger/um/pub/SessionManager.java
New file @@ -0,0 +1,40 @@ package de.uhilger.um.pub; import de.uhilger.baselink.PersistenceManager; import de.uhilger.um.api.Api; import static de.uhilger.um.api.UserMgr.MP_USER_DATA; import static de.uhilger.um.api.UserMgr.SQL_GET_USER_DATA; import static de.uhilger.um.api.UserMgr.WITHOUT_BLOBS; import de.uhilger.um.daten.UserData; import java.security.Principal; import java.util.List; /** * */ public class SessionManager extends Api { // /um/pub?c=de.uhilger.um.pub.SessionManager&m=getSessionUser public UserData getSessionUser() { UserData userData = new UserData(); userData.setFirstName("nicht angemeldet"); userData.setLastName("nicht angemeldet"); userData.setId("nicht angemeldet"); userData.setEmail("nicht angemeldet"); Object p = getRequest().getUserPrincipal(); if(p instanceof Principal) { String id = ((Principal) p).getName(); PersistenceManager pm = getDb(); List userDataList = getDb().select(getSql(SQL_GET_USER_DATA), getMapper(MP_USER_DATA), WITHOUT_BLOBS, id); if(userDataList != null && userDataList.size() > 0) { Object o = userDataList.get(0); if(o instanceof UserData) { userData = (UserData) o; } } } return userData; } } src/java/de/uhilger/um/web/Initialiser.java
@@ -18,10 +18,13 @@ package de.uhilger.um.web; import de.uhilger.baselink.GenericRecord; import de.uhilger.baselink.PersistenceManager; import de.uhilger.baselink.Record; import de.uhilger.um.api.UserMgr; import de.uhilger.um.daten.User; import de.uhilger.um.daten.UserData; import de.uhilger.um.daten.UserRole; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; @@ -124,6 +127,7 @@ PersistenceManager db = new PersistenceManager(); db.setDataSourceName(servletContext.getInitParameter(P_DSNAME)); servletContext.setAttribute(UserMgr.UM_DB, db); initMapper(servletContext); Properties sql = (Properties) servletContext.getAttribute(UserMgr.UM_SQL_PROPERTIES); if(!dbVorhanden(db, sql.getProperty(SQL_DB_VORHANDEN))) { logger.info("Datenbank ist nicht vorhanden"); @@ -143,6 +147,21 @@ } } /** * Mapper erzeugen * @param servletContext der ServletContext dieser Webanwendung */ /* TODO: das noch auf on demand anlegen: GenericRecord wird erst angelegt wenn er erstmals benoetigt wird. Ggf. auch einen Mechanismus zum entfernen laenger nicht benoetigter Mapper hinzufuegen */ private void initMapper(ServletContext servletContext) { servletContext.setAttribute(UserMgr.MP_USER, new GenericRecord(User.class)); servletContext.setAttribute(UserMgr.MP_USER_DATA, new GenericRecord(UserData.class)); servletContext.setAttribute(UserMgr.MP_USER_ROLE, new GenericRecord(UserRole.class)); } @SuppressWarnings("rawtypes") private boolean dbVorhanden(PersistenceManager pm, String sql) { boolean istVorhanden = false; web/WEB-INF/sql.properties
@@ -38,6 +38,9 @@ <entry key="deleteUserRoles"> delete from app.user_roles where user_name = ? </entry> <entry key="getUserData"> select user_name,user_first,user_last,user_email from app.users where user_name = ? </entry> <entry key="getDateList"> select substr(or_zeit,1,8) as tag, count(*) as anz from app.orte as orte where or_pers_id = ? web/WEB-INF/web.xml
@@ -29,10 +29,22 @@ <param-value>de.uhilger.um.api</param-value> </init-param> </servlet> <servlet> <servlet-name>PublicTransit</servlet-name> <servlet-class>de.uhilger.transit.web.TransitServlet</servlet-class> <init-param> <param-name>klassen</param-name> <param-value>de.uhilger.um.pub</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>TransitServlet</servlet-name> <url-pattern>/api</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>PublicTransit</servlet-name> <url-pattern>/pub</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30