Commit 6fbb49a305bee6a0959a752c3514b945d704fca3

Authored by Thomas Ziemer
1 parent 4908fce0

feature: Login/Logout und Session-Verwaltung

src/main/java/net/ziemers/swxercise/db/dao/user/UserDao.java
... ... @@ -20,4 +20,16 @@ public class UserDao extends GenericDao {
20 20 return user;
21 21 }
22 22  
  23 + public User findByUsername(final String username) {
  24 + User user = null;
  25 +
  26 + try {
  27 + // ermittelt den ersten Datensatz mit dem gesuchten Benutzernamen, auch wenn er sich nicht im Persistence Context befindet
  28 + user = (User) entityManager.createNamedQuery("User.findByUsername").setParameter("username", username).getSingleResult();
  29 + } catch(Exception e) {
  30 + /* nix */
  31 + }
  32 + return user;
  33 + }
  34 +
23 35 }
... ...
src/main/java/net/ziemers/swxercise/lg/model/user/Session.java 0 → 100644
  1 +package net.ziemers.swxercise.lg.model.user;
  2 +
  3 +import javax.enterprise.context.SessionScoped;
  4 +
  5 +@SessionScoped
  6 +public class Session implements java.io.Serializable {
  7 +
  8 + private User user = null;
  9 +
  10 + public User getUser() {
  11 + return user;
  12 + }
  13 +
  14 + public void setUser(User user) {
  15 + this.user = user;
  16 + }
  17 +
  18 +}
... ...
src/main/java/net/ziemers/swxercise/lg/model/user/User.java
... ... @@ -8,7 +8,7 @@ import net.ziemers.swxercise.db.BaseEntity;
8 8 @Entity
9 9 @NamedQueries({
10 10 @NamedQuery(name = "User.findById", query = "SELECT u FROM User u WHERE u.id = :id"),
11   - @NamedQuery(name = "User.findAll", query = "SELECT u FROM User u")})
  11 + @NamedQuery(name = "User.findByUsername", query = "SELECT u FROM User u WHERE u.profile.username = :username")})
12 12 public class User extends BaseEntity {
13 13  
14 14 private String firstname;
... ...
src/main/java/net/ziemers/swxercise/lg/user/service/UserService.java
... ... @@ -7,6 +7,7 @@ import javax.inject.Inject;
7 7  
8 8 import net.ziemers.swxercise.db.dao.user.UserDao;
9 9 import net.ziemers.swxercise.lg.model.user.Profile;
  10 +import net.ziemers.swxercise.lg.model.user.Session;
10 11 import net.ziemers.swxercise.lg.model.user.User;
11 12 import net.ziemers.swxercise.lg.user.dto.UserDto;
12 13  
... ... @@ -16,6 +17,24 @@ public class UserService {
16 17 @Inject
17 18 private UserDao dao;
18 19  
  20 + @Inject
  21 + private Session session;
  22 +
  23 + public boolean loginUser(UserDto dto) {
  24 + final User user = dao.findByUsername(dto.getUsername());
  25 +
  26 + if (user != null && user.getProfile().isValidPassword(dto.getPassword())) {
  27 + session.setUser(user);
  28 + return true;
  29 + }
  30 + return false;
  31 + }
  32 +
  33 + public boolean logoutUser() {
  34 + session.setUser(null);
  35 + return session.getUser() == null;
  36 + }
  37 +
19 38 public User findUser(final Long id) {
20 39 return dao.findById(id);
21 40 }
... ... @@ -38,4 +57,8 @@ public class UserService {
38 57 dao.remove(User.class, id);
39 58 }
40 59  
  60 + public User getSessionUser() {
  61 + return session.getUser();
  62 + }
  63 +
41 64 }
... ...
src/main/java/net/ziemers/swxercise/ui/UserViewController.java
... ... @@ -59,10 +59,10 @@ public class UserViewController {
59 59 */
60 60 @POST
61 61 @Consumes(MediaType.APPLICATION_JSON)
62   - @Produces({MediaType.TEXT_PLAIN})
  62 + @Produces(MediaType.TEXT_PLAIN)
63 63 public String createUser(UserDto dto) throws Exception {
64   - userService.createUser(dto);
65   - return "Ok";
  64 + final Long id = userService.createUser(dto);
  65 + return String.format("Ok (#%d)", id);
66 66 }
67 67  
68 68 /**
... ... @@ -78,7 +78,7 @@ public class UserViewController {
78 78 @PUT
79 79 @Path("{id}")
80 80 @Consumes(MediaType.APPLICATION_JSON)
81   - @Produces({MediaType.TEXT_PLAIN})
  81 + @Produces(MediaType.TEXT_PLAIN)
82 82 public String updateUser(@PathParam("id") Long id) throws Exception {
83 83 // TODO noch zu implementieren
84 84 return "Ok";
... ... @@ -92,10 +92,44 @@ public class UserViewController {
92 92 */
93 93 @DELETE
94 94 @Path("{id}")
95   - @Produces({MediaType.TEXT_PLAIN})
  95 + @Produces(MediaType.TEXT_PLAIN)
96 96 public String deleteUser(@PathParam("id") Long id) {
97 97 userService.deleteUser(id);
98 98 return "Ok";
99 99 }
100 100  
  101 + /**
  102 + * Meldet einen Benutzer durch übergebenen username und password mit einer neuen User-{@link net.ziemers.swxercise.lg.model.user.Session} an.
  103 + *
  104 + * @param dto das mittels der als JSON-Objekt übergebenenen Eigenschaften zu füllende {@link UserDto}
  105 + * @return "Ok", wenn die Erstellung des User-Objekts erfolgreich war.
  106 + */
  107 + @POST
  108 + @Path("/login")
  109 + @Consumes(MediaType.APPLICATION_JSON)
  110 + @Produces(MediaType.TEXT_PLAIN)
  111 + public String loginUser(UserDto dto) {
  112 + if (userService.loginUser(dto)) {
  113 + final User user = userService.getSessionUser();
  114 + return String.format("Ok (%s %s)", user.getFirstname(), user.getLastname());
  115 + }
  116 + return "Failed";
  117 + }
  118 +
  119 + /**
  120 + * Meldet den angemeldeten Benutzer von seiner User-{@link net.ziemers.swxercise.lg.model.user.Session} ab.
  121 + *
  122 + * @return "Ok", wenn die Erstellung des User-Objekts erfolgreich war.
  123 + */
  124 + @POST
  125 + @Path("/logout")
  126 + @Consumes(MediaType.APPLICATION_JSON)
  127 + @Produces(MediaType.TEXT_PLAIN)
  128 + public String logoutUser() {
  129 + if (userService.logoutUser()) {
  130 + return "Ok";
  131 + }
  132 + return "Failed";
  133 + }
  134 +
101 135 }
... ...