Avatar billede dannv Nybegynder
02. september 2003 - 14:00 Der er 19 kommentarer og
1 løsning

Definere en administrator area på Tomcat.

Jeg har en applikation som benytter container managed security. (Tomcat).

En del af siderne skal alle registrerede brugerer have adgang til, mens en del skal defineres som administrator del...

Her er min Web.xml:


/******************************************/

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <security-constraint>
      <web-resource-collection>
          <web-resource-name>chemicalinventory</web-resource-name>
          <url-pattern>/administration/*</url-pattern>
      </web-resource-collection>
      <auth-constraint>
          <role-name>adm</role-name>
      </auth-constraint>
  </security-constraint>
  <security-constraint>
      <web-resource-collection>
          <web-resource-name>chemicalinventory</web-resource-name>
          <url-pattern>/jsp/*</url-pattern>
      </web-resource-collection>
      <auth-constraint>
          <role-name>adm</role-name>
          <role-name>normal</role-name>
      </auth-constraint>
  </security-constraint>
  <login-config>
      <auth-method>FORM</auth-method>
      <!--<realm-name>bent og en kamel</realm-name>-->
      <form-login-config>
          <form-login-page>/Login.jsp</form-login-page>
          <form-error-page>/Error.html</form-error-page>
      </form-login-config>
  </login-config>
</web-app>

/*************************************************/


Jeg har to brugertyper en 'normal' og en 'adm'. Men når jeg benytter ovenstående kan en 'normal' bruger godt logge ind på administrator delen.... hvorfor.

Mine mapper ligger ordnet således:

Web-abbs:
chemical:
        jsp
        administrator
        WEB-INF

Så alle de sider som ligger under jsp skal alle have adgang til og alle dem under administrator naturligvis kun adm. Den første del som ligger under jsp fungerer fint med adgangskontrol....

Hvor er fejlen, eller hvad skal være anderledes.
Avatar billede arne_v Ekspert
02. september 2003 - 21:54 #1
Et par spørgsmål:

1)  Har du prøvet med forskellige web-resource-name's ?

2)  Du har lukket browseren helt ned mellem forsøgene ?
Avatar billede arne_v Ekspert
02. september 2003 - 22:03 #2
Det bør virke !

Jeg har lige testet følgende:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <security-constraint>
      <web-resource-collection>
          <web-resource-name>logintest open part</web-resource-name>
          <url-pattern>/open/*</url-pattern>
      </web-resource-collection>
      <auth-constraint>
          <role-name>user</role-name>
          <role-name>administrator</role-name>
      </auth-constraint>
  </security-constraint>
  <security-constraint>
      <web-resource-collection>
          <web-resource-name>logintest secure part</web-resource-name>
          <url-pattern>/secure/*</url-pattern>
      </web-resource-collection>
      <auth-constraint>
          <role-name>administrator</role-name>
      </auth-constraint>
  </security-constraint>
  <login-config>
      <auth-method>FORM</auth-method>
      <form-login-config>
          <form-login-page>/login.jsp</form-login-page>
          <form-error-page>/error.jsp</form-error-page>
      </form-login-config>
  </login-config>
</web-app>

og det virker.
Avatar billede arne_v Ekspert
02. september 2003 - 22:04 #3
Jeg tror iøvrigt at det er mest almindeligt kun at give en role afgang, men
at give et username flere roles.
Avatar billede dannv Nybegynder
03. september 2003 - 09:13 #4
Jeg kan se at du har to forskellige web-ressource-name... betyder dette at der er defineret to foldere under web-apps, som så igen er sat op i conf.xml eller hvorledes???

Jeg har ikke prøvet med forskellige web-ressourse-name da jeg har det hele liggende under samme folder, og det er vel den der skal defineres her?

Ja, jeg har lukket browseren, og tomcat ned hvergang jeg har ændret min web.xml.

Lige lidt extra info: Når man vælger en side, uanset om den ligger i jsp eller administrator folderen, ryger forespørgelsen igennem min controller som ligger i jsp folderen. Jeg ved ikke om dette kan være med til at forvirre billedet.


Hvorfor er det mest almindeligt kun at lade en role have adgang.... er det ikke mest logisk at hver bruger kun har en role, og så forskellige roles har adgang??
Avatar billede arne_v Ekspert
03. september 2003 - 09:30 #5
web-ressource-name er så vidt jeg ved bare en etiket på restriktionen
og har ikke noget med foldere at gøre.
Avatar billede arne_v Ekspert
03. september 2003 - 09:31 #6
Hvis din controller bruger forward og ikke redirect så må det være
controllerens URL der bliver checket.

Så det er med 99% sandsynelighed problemet.
Avatar billede arne_v Ekspert
03. september 2003 - 09:41 #7
Med hensyn til roller så er det altså den måde man normalt styrer
sikkerhed på.
Avatar billede dannv Nybegynder
03. september 2003 - 13:56 #8
Min controller benytter en RequestDispatcher, og dermed også forward... Det er ikke hensigtsmæssigt at ændre dette da det vil give ekstra roundtrip for hver request.

Men jeg har nu prøvet at flytte controlleren ned i roden for applikationen, og det giver mig ikke nogen løsning.

Jeg kan ikke simplet forklare hele systemet af mapper og filer; men hvis controlleren ligger i et område som ikke bliver tjekket, og resten af filerne ligger i hhv. 'normal' og 'adm' (som bliver tjekket, vha to forskellige web-ressourcer) så skulle det vel virke.?? Eller kan du herudfra se at der er noget galt med opsættet.
Avatar billede dannv Nybegynder
03. september 2003 - 13:57 #9
Mht. roller:

Skal 'adm' brugere så også have 'normal' rollen? lige nu har de enten eller.

Og skal der i databasen så defineres en række for brugeren med 'adm' og en med 'normal'?
Avatar billede arne_v Ekspert
03. september 2003 - 13:59 #10
Det hjælper ikke noget at flytte controlleren ud hvor der ikke er security
constraints på. Forward gør stadig at alle har adgang.

Er den controller din kode ? I så fald kunne du jo blande en smule
programmatisk security ind og lade den teste på role inden den
forwarder !
Avatar billede arne_v Ekspert
03. september 2003 - 14:07 #11
Ja normalt vil man definere at alle brugere har normal role og de
særligt udvalgte brugere har adm rolle.

[men vent med at ændre det til du har løst det andet problem for ikke
at blande tingene sammen]
Avatar billede dannv Nybegynder
03. september 2003 - 15:27 #12
Controlleren er bare den fil der styre redirection og et par andre småting, bruges som en indgang til systemet.

Jeg har jo netop valgt tomcat til at styre adgangskontrol så jeg kunne tænke på alt det andet.

Er der ikke en måde man kan strukturere sig ud af problemet, ved at placere filer på en måde så det virker uden de store krumspring?

Men du har ret i at det tyder på at den tjekker controllerens url, for jeg kan se at når controlleren ligger i roden er der ingen adgangskontrol på nogen sider overhovedet..........!!!!
Avatar billede arne_v Ekspert
03. september 2003 - 15:31 #13
Jeg tænker lige lidt. Stay tuned.
Avatar billede dannv Nybegynder
04. september 2003 - 11:56 #14
... ok der ventes i denne ende...
Avatar billede arne_v Ekspert
04. september 2003 - 23:02 #15
Hm.

Jeg kan ikke finde nogle gode ideer.

Du kan skifte fra forward til redirect (med det overhead det nu har).

Du kan putte kode mæssigt check ind i controlleren (med det arbejde
det nu giver).
Avatar billede soelvpil Nybegynder
10. september 2003 - 14:20 #16
Hvordan finder din controller (nydeligt design i øvrigt :-) ) ud af, hvilken del den skal forwarde til? Det må vel have en sammenhæng med de url'er der sendes til den eller hvad?

Måske kan du lægge sikkerheden på de url'er der sendes til controlleren, og styre sikkerheden på den måde?

Så kan du evt gøre jsp-siderne utilgængelige for direkte adgang, enten ved at at kræve en rolle som ingen bruger har, eller ved at lægge dem et sted under WEB-INF kataloget (her er de vist nok stadig tilgængelige ved forward).
Avatar billede dannv Nybegynder
19. september 2003 - 15:05 #17
Beklager den sene tilbagemelding....

Mht. til url'erne, så har jeg en 'action' attribut, som bliver tjekket, og når min kode finder en der matcher bliver man sendt hen til den url som er knyttet op herpå.

Jeg er ikke helt sikker på hvad du mener med dit forslag? kunne det være en ekstra attribut fx 'admin' som bliver sendt med min url...?

Hvad vinder jeg ved at ligge siderne under WEB-INF??

Jeg overvejer at lave endnu en controller..... Denne skulle så ligge under min administrator folder, så bliver forespørgelserne aldrig sendt ned jsp folderen (hvis det er en admin side...).
Avatar billede soelvpil Nybegynder
19. september 2003 - 18:02 #18
Jeg går ud fra, at du med action attribut mener, at du sender et hidden felt med fra dine sider, der indeholder denne parameter, og at din controller bruger denne parameter til at afgøre, hvilken 'action' der skal udføres.

Er din controller i øvrigt en servlet?

Problemet er, at min ikke via container-sikkerheden kan stye på andet end den url (uden ekstra parametre), der sendes til controlleren.

Du bliver altså nødt til at lave lidt om, så din action i stedet for at stå som en parameter, bliver en del af selve url'en.

Jeg vil foreslå, at du laver noget i retningen af følgende i web.xml

<servlet>
<servlet-name>action</servlet-name>
<servlet-class>navn_paa_min_controller_klasse</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>controller/*</url-pattern>
</servlet-mapping>

Jeg vil så foreslå, at du i stedet for at sende din action med som parameter, i stedet sender til url'en

controller/actionnavn hvis det skal være offentligt tilgængeligt
eller
controller/admin/actionnavn

Du kan så beskytte alle sider der hedder controller/admin/*

Dette betyder så, at din controller i stedet for at spørge på dens action-parameter, skal spørge på din sidste del af url'en.

Blev det klarere?
Avatar billede dannv Nybegynder
22. september 2003 - 19:46 #19
Hej soelvpil...

Tak for indsatsen...

Min Controller en jsp side, men bliver jo i sidste ende til det samme = servlet. Jeg har valgt at lave en lille controller klasse som kører den del af min applikation. Jeg har i forvejen mit action element som en del af url'en og ikke et hidden felt.

Og med 2 forskellige controllere virker det. Det er fordi at den i det oprindelige opsæt blev nødt til at gå igennem .jsp mappen som indeholdt min controller, og for at komme dertil, blev man allerede prompted for password. Blev det godkendt her opstod der åbenbart noget forvirring da man efterfølgende kunne få adgang til admin delen uden de korrekte rettigheder...
Avatar billede dannv Nybegynder
22. september 2003 - 19:46 #20
også tak til arne....
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

Seneste spørgsmål Seneste aktivitet
I går 10:21 Ny printer, men hvilken Af mort1 i Printere
13/0819:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging