Ik heb een login gemaakt mbv JAAS.
Dit is de loginmodule, en ik wil het object dat op regel 35 word aangemaakt gebruiken in verdere servlets.
Nu kan ik nergens een methode vinden om dit door te geven, mijn servlets hebben geen kennis van de loginmodule. Tevens heeft JAAS geen HTTPContext waardoor ik ook de Session objecten niet kan gebruiken.
De benodige login word dmv securitycontraints aangeroepen vanuit de web.xml
Wat heb ik al geprobeerd?
- Gekeken of ik sessions kan gebruiken
- Heel google afgespit
- Documentatie van jaas doorgelezen
De vraag
Weet iemand een manier hoe ik dit toch door kan geven aan mijn servlets? Helaas moet ik het op deze manier doen, maar ik ben er al 3 uur mee bezig en tot nu toe geen oplossing gevonden
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| public class MyLoginModule implements LoginModule //Properties e.d public boolean login() throws LoginException { // prompt for a user name and password Callback[] callbacks = new Callback[2]; callbacks[0] = new NameCallback("Username: "); callbacks[1] = new PasswordCallback("Password: ", false); String username =""; String password = ""; try { callbackHandler.handle(callbacks); username = ((NameCallback)callbacks[0]).getName(); password = String.valueOf(((PasswordCallback)callbacks[1]).getPassword()); ((PasswordCallback)callbacks[1]).clearPassword(); } catch (java.io.IOException ioe) { throw new LoginException(ioe.toString()); } catch (UnsupportedCallbackException uce) { throw new LoginException("Error: " + uce.getCallback().toString()); } try { String salt = String.valueOf(System.currentTimeMillis()); String passwordHash = abc.bank.MD5.encode(abc.bank.MD5.hash(password + salt)); //Dit object wil ik verder gebruiken in mijn servlets abc.bank.AccountOffice ao = new abc.bank.AccountOffice(username,passwordHash,salt); roles = new MyGroup("Roles"); if (username.equals("beheerder")) { roles.addMember(new MyPrincipal("beheerder")); } else { roles.addMember(new MyPrincipal("rekeninghouder")); } callerPrincipal = new MyGroup("CallerPrincipal"); callerPrincipal.addMember(new MyPrincipal(username)); System.out.println("(LOGIN)Login success with username: [" + username + "] and password: [" + password + "]"); succeeded = true; return true; } catch (Exception ex) { System.out.println("(LOGIN)Login failed with username: [" + username + "] and password: [" + password + "] #Reason: " + ex.getMessage()); return false; } } |
Dit is de loginmodule, en ik wil het object dat op regel 35 word aangemaakt gebruiken in verdere servlets.
Nu kan ik nergens een methode vinden om dit door te geven, mijn servlets hebben geen kennis van de loginmodule. Tevens heeft JAAS geen HTTPContext waardoor ik ook de Session objecten niet kan gebruiken.
De benodige login word dmv securitycontraints aangeroepen vanuit de web.xml
XML:
1
2
3
4
5
6
7
8
9
10
| <!-- Servlet security --> <security-constraint> <web-resource-collection> <web-resource-name>IndexControl</web-resource-name> <url-pattern>/index</url-pattern> </web-resource-collection> <auth-constraint> <role-name>rekeninghouder</role-name> </auth-constraint> </security-constraint> |
Wat heb ik al geprobeerd?
- Gekeken of ik sessions kan gebruiken
- Heel google afgespit
- Documentatie van jaas doorgelezen
De vraag
Weet iemand een manier hoe ik dit toch door kan geven aan mijn servlets? Helaas moet ik het op deze manier doen, maar ik ben er al 3 uur mee bezig en tot nu toe geen oplossing gevonden