Domanda

Sono nuovo di servlet e JSP. Volevo sapere qual è il miglior design sarebbe per un problema di esempio che sto cercando di scrivere il codice per. Qui va -

Voglio creare un sito web (www.example.com) che proprio elenca la storia di accesso di ogni utente (non alcun functionility uno vuole, ma solo un esempio per il gusto di uno).

Quindi ci sono due URL qui -. /Index.jsp e / login (assumiamo tutte le registrazioni sono fatte)

L'index.jsp mostrerà tutti gli account di accesso del passato per quell'utente. Ma per questo devo per identificare se l'utente è già loggato o meno. Se l'utente è già connesso gli mostro la sua storia, il resto devo a lui trasmettere alla pagina di login automaticamente.

Ho già scritto una consuetudine crittografia forte cookie che mi dirà se l'utente è connesso o meno. Quindi, se il cookie viene inviato a me posso verificare se è autenticata o se il cookie / sessione è scaduta o meno. Questo non è un problema.

Il problema di progettazione che ho è questo - Come dovrebbe la classe Java controllo per l'autenticazione essere chiamato? Faccio a utilizzare i tag JSP personalizzati per controllare questo e la riscrittura della pagina? Voglio fare la classe facile per i miei sviluppatori HTML da utilizzare durante la creazione di nuove pagine. Qual è il modo migliore per farlo?

Credo che la mia domanda ha più a che fare con l'utilizzo corretto del codice Java in JSP e / o può essere librerie di tag personalizzati. Non esitate a andare avanti finché un rant come si vuole:)

Grazie per la lettura.

  • Vas
È stato utile?

Soluzione

È possibile utilizzare un Filter per questo. In questo modo è possibile mantenere la logica del codice in un unico luogo, senza la necessità di CopyPaste inutilmente lo stesso codice di tutte le pagine JSP e mantiene anche JSP ben scriptlet -free.

Invece di reinventare la sessione con la creazione di un cookie da soli, si può anche solo fare uso di Java EE fornito HttpSession API. Questo è fondamentalmente già sostenuta da un cookie ed è possibile memorizzare oggetti Java nella sessione come attributi in modo che rimangano a disposizione l'intera sessione utente.

Il login basta mettere l'oggetto in User HttpSession:

User user = userDAO.find(username, password);
if (user != null) {
    request.getSession().setAttribute("user", user);
} else {
    // Show error.
}

Per verificare se un utente è connesso, utilizzare un Filter. Implementare il href="http://java.sun.com/javaee/5/docs/api/javax/servlet/Filter.html" rel="nofollow noreferrer"> doFilter() metodo

if (((HttpServletRequest) request).getSession().getAttribute("user") != null) {
    chain.doFilter(request, response); // User is logged in, just continue with request.
} else {
    ((HttpServletResponse) response).sendRedirect("login"); // Not logged in, redirect to login page.
}

e mapparlo su un url-pattern come /secured, /restricted, /users o giù di lì. Mettere le pagine JSP per-essere-ristrette nella stessa cartella in webcontent pure.

Per il logout un utente, basta rimuoverla dalla sessione:

request.getSession().removeAttribute("user");

// Or, more drastically, invalidate the entire session:
request.getSession().invalidate();

Detto questo, Java EE fornisce già dichiarativa (basato su XML-config) contenitore di sicurezza gestita, è possibile trovare un tutorial su di esso qui . Si può fare uso di esso, ma se si vuole lasciare il vostro intercettare applicazione indepentently sulle accessi gestiti dal contenitore per esempio mantenere una visione della storia di login, quindi è ancora necessario creare un Filter. Ad esempio:

HttpServletRequest httpRequest = (HttpServletRequest) request;
UserPrincipal user = httpRequest.getUserPrincipal();
HttpSession session = httpRequest.getSession();
if (user != null && session.getAttribute("user") == null) {
    session.setAttribute("user", user);

    // First-time login. You can do your intercepting thing here.
}
chain.doFilter(request, response);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top