Avatar billede dannv Nybegynder
02. maj 2003 - 19:22 Der er 16 kommentarer og
1 løsning

Servlet filter til login.

Jeg er ved at lave en applikation som består af en masse .jsp sider. Til at styre hvorvidt mine brugere er logget ind, vil jeg benytte et servlet filter. Men med disse filtre har jeg ikke noget erfaring. Jeg har lavet et basic filter, men er i tvivl om nogle emner:

Når man skal logge ind sker det fra en .jsp side som kalder en bønne, der laver nogle db check. Til slut bliver der sat en boolean, som kan tilgåes via en ’boolean isOK()’ metode (true = logget ind).
Jeg ønsker så at tjekke hver gang at en bruger tilgår en side om han er logget korrekt ind, og dette via et filter.
Hvordan får jeg fat i min isOK() metode fra filteret?
(Hvordan skal dette foregå i en servlet, skal man oprette et objekt af bønnen?)

Her er lige noget kode som mit filter ser ud indtil nu:

package ProjectPack;
import javax.servlet.ServletResponse;
import javax.servlet.Filter;
import javax.servlet.ServletException;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.FilterChain;
import java.io.IOException;

public class LoginFilter implements Filter
{
  private FilterConfig filterConfig = null;

  public void init(FilterConfig filterConfig) throws ServletException
  {
    this.filterConfig = filterConfig;
  }

  public void destroy()
  {
    this.filterConfig = null;
  }

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
  {
    //Her skal der så laves et tjek på om brugeren er logget korrekt ind hver gang han kalder en side!
    boolean check = ??
   
    if (check == false)
    {
      response.sendRedirect("Login.jsp?errorcode1=yes");
    }
   
    chain.doFilter(request, response);
  }
}
Avatar billede arne_v Ekspert
02. maj 2003 - 19:23 #1
Er det et must at der skal bruges et servlet filter ?

Der er nemmere metoder !
Avatar billede arne_v Ekspert
02. maj 2003 - 19:24 #2
Se f.eks.:
  http://www.eksperten.dk/spm/346224
  http://www.eksperten.dk/spm/340431 (skip alt det første med JAAS)
Avatar billede arne_v Ekspert
02. maj 2003 - 19:27 #3
De to oplagte alternativer er:

1) container managed form based declarative security (der er eksempel
  på dette i begge links)

2) application managed programmatic security (der er et eksempel
  på dette i det sidste link) hvor man bruger session objektet
  til at gemme login-status
Avatar billede dannv Nybegynder
02. maj 2003 - 19:53 #4
Jeg her valgt servlet filter fordi det ser ud som en rigtig god ide. jeg slipper så for at have den samme kode (som tjekker login status) på alle mine sider.
Jeg har valgt løsningen med at lave det hele selv og ikke lade containeren stå for login. Og det eneste jeg mangler er dette filter, så kører det.

Indtil nu har hver side videresendt brugeren til en controller side som kører tjekket igennem via min loginBean.
Avatar billede dannv Nybegynder
02. maj 2003 - 20:11 #5
Så det jeg egentligt mangler det er at kunne tjekke mit sessions objekt fra filteret(logget ind eller ej). Men det ved jeg ikke hvordan gøres!
Avatar billede arne_v Ekspert
02. maj 2003 - 20:15 #6
Hvis du har:

<%
LoginObject mylogin;
%>

så kan du hente fra sessionen med:

<%
mylogin = session.getAttribute("login");
%>

og gemme med:

<%
session.setAttribute("login", mylogin);
%>
Avatar billede arne_v Ekspert
02. maj 2003 - 20:17 #7
Se:
  http://www.eksperten.dk/spm/340431
  15/04-2003 21:28:48
  secure.jsp
Avatar billede arne_v Ekspert
02. maj 2003 - 20:17 #8
Hm.

Eller måske er det ikke helt så simpelt, fordi det er jo et filter og ikke
en JSP side / servlet du har.

Jeg skal vist lige læse lidt om filter.
Avatar billede arne_v Ekspert
02. maj 2003 - 20:29 #9
Jeg tror at du i din doFilter metode kan bruge:

HttpSession ses = ((HttpServletRequest)request).getSession();
LoginObject mylogin = ses.getAttribute("login");
ses.setAttribute("login", mylogin);
Avatar billede arne_v Ekspert
02. maj 2003 - 20:42 #10
Jeg har læset lidt mere.

HttpSession ses = ((HttpServletRequest)request).getSession();

er svaret på hvordan du får fat i sessionen.

Og jo mere jeg læser jo bedre ser ideen med at ligge
security checket i sådant et filter ud.
Avatar billede dannv Nybegynder
02. maj 2003 - 20:48 #11
OK det ser ud som noget af det rigtige men jeg har lige et forståelses prob.
HttpSession ses.... henter sessionsobjektet.
LoginObject mylogin = ses.getAttribute("login");-> "login" er dette navnet på det objekt som er blevet skabt af min bønne?
ses.setAttribute("login", mylogin); Her er jeg ikke helt med. Er det det interne objekt mylogin som her for overført værdien... Jeg har en metode i min bønne som hedder isOK() som tjekker login. og jeg er lidt fikseret på at ville have fat i denne eller noget andet fra min bønne... (er det ikke det jeg skal??)
Avatar billede arne_v Ekspert
02. maj 2003 - 20:52 #12
LoginObject = typen af din bønne
mylogin = en referance til denne

getAttribute når du skal hente din bønne (returnerer null hvis den ikke er der)

setAttribute når du skal gemme din bønne.

"login" = tilfældigt navn dne gemmes under
Avatar billede dannv Nybegynder
02. maj 2003 - 21:14 #13
ok, jeg prøver lige at arbejde lidt med det, og så må vi se om det virker. Hvis du får gode ideer eller finder ud af noget giv endelig besked.
Avatar billede arne_v Ekspert
10. maj 2003 - 00:22 #14
Har du fået det til at virke ?
Avatar billede arne_v Ekspert
17. maj 2003 - 21:29 #15
?
Avatar billede arne_v Ekspert
22. maj 2003 - 22:26 #16
?
Avatar billede dannv Nybegynder
05. juni 2003 - 11:13 #17
Jeg har ikke haft så meget tid til denne del. men har det stort set til at virke... sender lige noget kode så du kan se sagen... (senere..)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB