Java Bean w klasie JAX-RS

0

Witajcie,

Chcę zrobić coś takiego, że np. strona główna, logowania itp. będą wyświetlane przez JSP. Później AngularAS będzie wykonywał różne zapytania AJAX do serwera do klasy z JAX-RS. Jeśli mam Beana EJB to mogę go użyć w takiej klasie. Czy takie rozwiązanie jest dobre, czy są lepsze? Chcę mieć RESTowe EjPiAj, żeby móc zrobić klienta desktopowego i klienta napisanego w JSP.

0

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?

1 użytkowników online, w tym zalogowanych: 0, gości: 1