Zrobiłem taki g_wnokod:
package pl.bajos.blog.bean;
import org.mindrot.jbcrypt.BCrypt;
import pl.bajos.blog.entity.UserModel;
import javax.ejb.Stateful;
import javax.ejb.Stateless;
import javax.enterprise.context.SessionScoped;
import javax.json.JsonObject;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import java.io.Serializable;
@Path("auth")
@Stateful
@SessionScoped
public class Logging implements Serializable{
@PersistenceContext(unitName = "blogPersistence")
EntityManager em;
Boolean logged;
Long userId;
@POST
@Path("login/{login}")
@Produces("application/json")
public Response logIn(@PathParam("login") String login,
@QueryParam("password") String password,
@Context Request req)
{
em.getTransaction().begin();
// Getting user with specified login
Query query = em.createQuery("SELECT user FROM UserModel user WHERE user.login= :login");
query.setParameter("login", login);
UserModel user = (UserModel)query.getSingleResult();
em.getTransaction().commit();
// If doesn't exist user with the login
if(user == null) {
}
// Check if password is correct
if(BCrypt.checkpw(password, user.getPasswordHash())) {
logged = true;
userId = user.getId();
}
else {
logged = false;
userId = null;
}
return Response.ok().build();
}
@POST
@Path("logout")
@Produces("application/json")
public Response logOut(@Context Request req)
{
return Response.ok(200).build();
}
}
Nie wiem jak zrobić tutaj coś takiego, że na podstronach mogę się dowiedzieć czy jestem zalogowany bo nie ma jak pobrać sesji Http, więc zrobiłem to jako @Stateful . Nie wiem czy przechowywać w DB tokeny do zalogowanych userów i @stateless czy tak jak jest (choć pewnie jest coś źle). Chcę zwrócić w przypadku zalogowania jak i nie JSON z "enumem" błędu, żeby wiedzieć "co to się stanęło". Wiem, że jak Serializable to muszę zrobić gettery i settery, zrobię. W ogóle czy muszę mieć @SessionScoped
?