Solved

getUserPrincipal query in jsp

Posted on 2010-09-14
8
1,731 Views
Last Modified: 2012-05-10
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
Comment
Question by:kalyandm
  • 4
  • 4
8 Comments
 
LVL 27

Expert Comment

by:mrcoffee365
ID: 33674386
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
 

Author Comment

by:kalyandm
ID: 33693291
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
 
LVL 27

Expert Comment

by:mrcoffee365
ID: 33694313
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
Complete VMware vSphere® ESX(i) & Hyper-V Backup

Capture your entire system, including the host, with patented disk imaging integrated with VMware VADP / Microsoft VSS and RCT. RTOs is as low as 15 seconds with Acronis Active Restore™. You can enjoy unlimited P2V/V2V migrations from any source (even from a different hypervisor)

 

Author Comment

by:kalyandm
ID: 33699243
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
 
LVL 27

Expert Comment

by:mrcoffee365
ID: 33699324
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
 

Author Comment

by:kalyandm
ID: 33699352
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
 
LVL 27

Accepted Solution

by:
mrcoffee365 earned 250 total points
ID: 33711724
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
 

Author Closing Comment

by:kalyandm
ID: 33830747
it partly answered my query
0

Featured Post

Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
getting param value 7 53
project group option in netbeans equivalent term in eclipse 1 50
doubleChar java challenge 7 106
eclipse buid path vs tomcat lib path 10 24
The question appears often enough, how do I transfer my data from my old server to the new server while preserving file shares, share permissions, and NTFS permisions.  Here are my tips for handling such a transfer.
This article outlines why you need to choose a backup solution that protects your entire environment – including your VMware ESXi and Microsoft Hyper-V virtualization hosts – not just your virtual machines.
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…

803 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question