• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1964
  • Last Modified:

getUserPrincipal query in jsp

Hello
I'm trying to implement single sign on jsp where in the jsp should retrive the details of the user(username & password) logged into the machine.I'm using the jsp code below
the web.xml has security roles configured already


-------------------------------------------
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<%@page import="javax.security.auth.callback.*,javax.security.auth.*,java.util.*,java.security.*,java.io.*,java.net.*,java.text.*,javax.servlet.http.*"%>

<%

Principal userPrincipal = request.getUserPrincipal();
String username=weblogic.security.SubjectUtils.getUsername(weblogic.security.Security.getCurrentSubject());
out.println("Logged in user >>>>> " + " " + username +"<br>");
CallbackHandler handler = new weblogic.security.SimpleCallbackHandler("xyz","uuu");
Subject mySubject = weblogic.security.services.Authentication.login(handler);
weblogic.servlet.security.ServletAuthentication.runAs(mySubject, request);
out.println("Principal " + " " + request.getUserPrincipal()+"<br>");

%>

but when I run this jsp , the principal is displayed as null for the first time and when I refresh the page it comes back with the user principal..can I know how it can retrive it in first place when I access this page..
I would also want to know how I can replace the hardcoded username & password values with something dynamic so it can use them
CallbackHandler handler = new weblogic.security.SimpleCallbackHandler("xyz","uuu");

thanks
0
kalyandm
Asked:
kalyandm
  • 4
  • 4
1 Solution
 
mrcoffee365Commented:
request.getUserPrincipal will always work.  Your problem is probably with the weblogic.security.SubjectUtils.getUsername call.

If you use this line, you'll get the username:

String username = userPrincipal.getName();

0
 
kalyandmAuthor Commented:
Hello
I tried userPrincipal.getName() but the very first time it returns null and subsequently returns the principal correctly.since this is the first jsp page that is accessed I would want to be able to get the username first time itself..please suggest
0
 
mrcoffee365Commented:
If the person is not logged in, then there won't be a username.  There's nothing you can do about that.

The username can only be found once the user logs in.  Where were you thinking you would get the username if the person is not logged in?  Were you thinking it would be in the cookie or in a parameter?
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
kalyandmAuthor Commented:
The user is logged in via the machine and within weblogic the security constraints are configured and a user group created , the sso configuration using kerberos with active directoy is setup.So when user logs into the machine to access the jsp the username should be available I thought ..is it not the case?

thanks
0
 
mrcoffee365Commented:
It is not the case.  The servlet container has to know about the login.  Don't users have to log in to see your page?  

If users do not have to login, then you must have an action which automatically logs them in from the servlet container perspective.  Your calls to weblogic.security.services.Authentication.login and weblogic.servlet.security.ServletAuthentication.runAs are supposed to do that for you.  Do you see the user logged in after the runAs?
0
 
kalyandmAuthor Commented:
the users don't have a login page..The idea is that the sso principle where the user logs into the machine should be used to go into the application.

regarding your second question..

yes I do but for the first time it comes back as null and after i refresh the page it comes back with the correct user.I can assure you that the authentication part is fine becoz if I put any user that doesn't exist in the system it comes back with an error which is how it should be.It should take the user I supplied in weblogic.security.services.Authentication.login(handler);
 and then validate it agaianst weblogic configured group..this aprt is working fine ..my doubt is how do I get the username/password that I need to pass onto
weblogic.servlet.security.ServletAuthentication.runAs if that is possible

thanks
0
 
mrcoffee365Commented:
In your example above, your user is not logged in until you have the hardcoded username and password.  You have to collect the username and password from the user to use this scheme.  It is unlikely that you can get the password from the weblogic environment anyway - the code you're using is for the case where you have decided to write your own login page, and you are handing the username and password to the weblogic security system.

So no, you can't collect the username and password without asking the user.  Which means making a login form and having them fill it in.

If you haven't already read it, the book Weblogic: The Definitive Guide is helpful on this topic:
http://flylib.com/books.php?ln=en&n=2&p=107&c=26&p1=1&c1=1&c2=187&view=1


0
 
kalyandmAuthor Commented:
it partly answered my query
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 4
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now