Используйте JavaBean с сессией области в пользовательском теге - PullRequest
0 голосов
/ 17 июня 2019

Упражнение это: Напишите страницу JSP, в которой используется пользовательский тег без атрибутов, который позволяет условно отображать ваше тело на основе привилегий пользователя, который сделал запрос (предположим, что аутентифицируемый пользователь представлен сессионным компонентом, к которому необходимо обратиться через методы тега).

Я создал bean-компонент с scope = "session", но я не понимаю, как передать bean-компонент в тег Handler? Я просто использовал session.setAttribute ("...") для передачи атрибутов в обработчик тегов, но таким образом я не передаю Bean. Вы можете мне помочь?

КОД JSP:

<html>
  <head>

    <title> </title>
  </head>
  <body>
    <%@ page import="java.util.*"%>
    <%@ taglib uri="WEB-INF/tlds/mialib.tld" prefix="tag"%>
    <%! HashMap<String,String> luser = new HashMap();%> <!-- Contiene la lista di tutti gli utenti registrati -->
    <%! ArrayList<String> ladmin = new ArrayList<String>(); %> <!-- Contiene la lista di tutti gli utenti che sono admin -->
    <%! String username; %>
    <%! String password; %>
    <%! String admin; %>
    <jsp:useBean id="au" scope="session" class="beans.Autenticazione"/>

    <%
      //creo la lista con tutti username/password degli utenti registrati
      luser.put("andrea","andreag");
      luser.put("erica","ericae");
      luser.put("filippo","filippob");
      luser.put("alessia","alessiar");
      //creo la lista con gli username degli admin
      ladmin.add("andrea");
      ladmin.add("filippo");
      username=request.getParameter("usern"); //prendo da login.html l'username
      password=request.getParameter("passw"); //prendo da login.html la password

      if(luser.containsKey(username) && (password.equals(luser.get(username)))){ //controllo se se username e password coincidono con quelli dell'HashMap
        if(ladmin.contains(username)){ //controllo se l'username è presente nella lista degli admin
          admin="true";
          %>
          <jsp:setProperty name="au" property="username" param="usern"/>
          <jsp:setProperty name="au" property="password" param="passw"/>
          <jsp:setProperty name="au" property="admin" value="<%=admin%>"/>
          <%

            session.setAttribute("admin",admin);
            session.setAttribute("username",username);
          %>
          <tag:panel/>
          <%
        }else{ //NON è admin l'utente autenticato
          admin="false";
          %>
          <jsp:setProperty name="au" property="username" param="usern"/>
          <jsp:setProperty name="au" property="admin" value='<%=admin%>'/>
          <%
            session.setAttribute("admin",admin);
            session.setAttribute("username",username);
            session.setAttribute("password",password);
          %>
          <tag:panel/>
          <%
        }
      }else{ //username o password NON corretti
        out.println("Login errato. Clicca <a href ='login.html'> qui </a> per riprovare");
      }

    %>
  </body>
</html>

КОД ОБРАБОТКИ ТЕГОВ:

package miei_tag;


import java.io.*;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import javax.servlet.ServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class Admin extends TagSupport{ //NON ho il body con TagSupport
  public int doStartTag() throws JspException{
    try{
      String prova=Autenticazione.getUsername();
      HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
      HttpSession session = request.getSession();
      String ammi=(String) session.getAttribute("admin");
      String usern = (String) session.getAttribute("username");
      String passwd = (String) session.getAttribute("password");
      JspWriter out = pageContext.getOut();
      out.println(" "+passwd);
      if(ammi.equals("false")){
        out.println(usern + " NON SEI ADMIN, NON HAI UN PANNELLO");
      }else{
        if(ammi.equals("true")){
          out.println("<h3>CIAO " + usern + " PANNELLO DI CONTROLLO PER UTENTI ADMIN</h3>");
        }
      }
    }catch(IOException ioException){
      throw new JspException(ioException.getMessage());
    }
    return SKIP_BODY;
  }
}

...