public class HelloWorld extends GenericPortlet{
protected void doView(RenderRequest request,
RenderResponse response) throws
PortletException, IOException {
response.setContentType("text/html");
response.getWriter().println("Hello Portlet");
}
}
<portlet>
<description>HelloWorldDescription
</description>
<portlet-name>HelloWorld
</portlet-name>
<display-name>Hello World
</display-name>
<portlet-class>com.test.HelloWorld
</portlet-class>
<expiration-cache>-1
</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW
</portlet-mode>
</supports>
<supported-locale>en
</supported-locale>
<portlet-info>
<title>Hello World</title>
<short-title>Hello World
</short-title>
<keywords>Hello,pluto</keywords>
</portlet-info>
</portlet>
<web-app>
<display-name>Hello World Portlet
</display-name>
<welcome-file-list
<welcome-file>index.jsp
</welcome-file>
</welcome-file-list>
</web-app>
<servlet>
<servlet-name>HelloWorld</servlet-name>
<display-name>HelloWorld Wrapper</display-name>
<description>Automated generated
Portlet Wrapper</description>
<servlet-class>org.apache.pluto.core.PortletServlet
</servlet-class>
<init-param>
<param-name>portlet-class</param-name>
<param-value>com.test.HelloWorld
</param-value>
</init-param>
<init-param>
<param-name>portlet-guid</param-name>
<param-value>HelloPluto.HelloWorld
</param-value>
</init-param>
</servlet>
<application id="5">
<definition-id>HelloWorld</definition-id>
<portlet id="1">
<definition-id>HelloWorld.HelloWorld</definition-id>
</portlet>
</application>
<fragment name="p2" type="portlet">
<property name="portlet" value="5.1"/>
</fragment>
如果目对SSO的要求比较低Q又不想对要被集成的pȝ做Q何改动,可采用下面介l的方式单实玎ͼ(x)下面我们通过一个例子来说明。假如一个门户项目要对下面的几个pȝ做SSO?/p>
用户在这些系l中的用户名Q密码各不相同,如:(x)员工号ؓ(f)001的员工在q些pȝ中的用户名,密码分别如下Q?/p>
用户 | pȝ | 用户?/th> | 密码 |
---|---|---|---|
001 | Portalpȝ | A | 1234 |
001 | 邮gpȝ | B | 2345 |
001 | DOMINOpȝ | C | AAAA |
001 | 报销pȝ | D | CCCC |
001 | 工资pȝ | E | BBBB |
首先Q要建立员工在PORTALpȝ中的用户名和其他pȝ中的用户名之间的对应关系q保存。可保存在表中或LDAP中或文gpȝ中。当然要考虑q些pȝ之间的数据同步问题。比较好的方式是扑ֈ用户在这些系l中的都存在的唯一信息Q如员工PMAIL地址Q姓名等Q。通过唯一信息实时到各个系l中d认证所需要的信息。就不需要考虑数据同步问题。比较实用。可以徏立类g面的表:(x)密码可采用加密保存。如果是采用BEA的Weblogic Portal,可采用UUP来保存这些信息?/p>
( user varchar2(20), /*用户?/ app_name varchar2(20), /*应用pȝ*/ architect varchar2(4), /*应用pȝ的架构BS或CS*/ app_company varchar2(50), /*用户所属分公司*/ app_department varchar2(50), /*用户所在的部门*/ app_user varchar2(15), /*在该pȝ中的用户?/ app_passwd varchar2(15), /*在该pȝ中的密码*/ app_cookie varchar2(30), /*COOKIE名称*/ form_user varchar2(20), /*认证面中FORM的用户名字段*/ form_passwd varchar2(20), /*认证面中FORM的密码字D?/ app_special varchar2(20) /*其他*/ );
通过IFRAME或超q接方式集成目标pȝ,q在URL中带上用户名和密码。如集成DOMINO可采用如下方式:(x)
<IFRAME src=http://host1/names.nsf?Login&Username=admin&Password=pass&RedirectTo=/names.nsf
width="100%" frameborder="0" align="middle" height="100%" hspace="0" marginheight="0" marginwidth="0" scrolling="yes" style="background-color:#f7f7ff;">
</IFRAME>
或:(x)
Href src=?a href="http://localhost/names.nsf?Login&Username=admin&Password=password&RedirectTo=/names.nsf" target="_parent">http:// host1/names.nsf?Login&Username=admin&Password=pass&RedirectTo=/names.nsf?
以上采用的是在HTTP中直接传递明码,为提高安全性,可采用HTTPS来传递用户名和密码。另外采用这U方式被集成的系l必L持FORM方式认证。J2EE应用QDOMINO{都支持FORM认证?/p>
q两U方式如果SSO成功Q就自动q入目标pȝ的界面,如果实现?x)显C目标系l的d界面。其效果囑֦下:(x)
q种方式Q必ȝ护对应关p表Q如上面的sso_info。更好的方式是提供界面,让最l用戯q护这U对应关p,可模仿Compoze portlets for lotus的做法,在用L(fng)一ơ进入要与之做SSO的系l时Q如DOMINOpȝQ显CZ个界面,让用戯p入他在该pȝ中的用户?密码{信息。ƈ保存到表中或LDAP{其他数据源中。以后用戯q入q些pȝӞq接从表中或其他数据源中取用户的用户名/密码{信息,帮助用户做认证。徏议采用这U方式。如下图所C。如果用h变了自己在DOMINOpȝ中的用户名,密码。从门户pȝq入DOMINOpȝӞ认证?x)失败,重新显C类g面的界面。让用户重新输入他在DOMINOpȝ中新的用户名Q密码ƈ保存?/p>
以上q种实现方式Q一般需要浏览器支持COOKIEQ所以要注意览器的配置Q在开发阶D,为方便调试,可设|IEQ让它显CCOOKIE的名U。如下所C:(x)
采用q种方式Q对要集成的pȝ不需要做M的改动。如果PORTALpȝ中的用户在被集成的系l中的权限都一P可采用徏立一个通用用户的做法。也是所有在PORTALpȝ中的用户都采用这个通用用户q入目标pȝ。这U方式等于是采用面集成方式做集成。比较方便用。另外,有时候需要采用调用APIQ或配置Adapter{应用集成方式来集成其他pȝQ一般也是通过定义一个连接专用的用户。在API中或在配|Adapter的时候写歅R如采用JAVA API方式集成DOMINOQ?/p>
lotus.domino.Session dominoSession = NotesFactory.createSession(dominoServer, “admin? “password?;
l常有h问CSl构的应用如何实现SSOQ本人的是对q种pȝ不要自己d现SSO。很ȝQ其实输个用户名Q密码没什么大不了的。如果要实现Q一是采用商业Y件。另外也可以采用以下方式Q在PORTAL的PORTLET上徏立超q接。ƈ通过APPLET方式启动CSl构的应用系l的d界面。然后通过如下的方式把用户?密码传递过厅R?/p>
-不能做Q何改动的客户?/b> - WIN消息Q给dH口发送用户名Q密码等d所需要的信息Q?模拟键盘Qjava有模拟键盘输入的APIQ?/p>
-可以做改动的客户?/b> - 参数传递,q让d的EXE文gd参数q行认证?/p>
因ؓ(f)要让APPLET执行本地的EXE文gQ所以必dIE中的JRE的安全进行设|?/p>
在采用以上方式实CSSO后,要注意LOGOUTQ可采用与LOGIN相同的方式。也可以通过被集成系l的时讄来实现?/p>
作者简?/span> | |
dev2dev ID: xcjingQBEA 资深技术顾问,加入BEA中国多年Q在门户技术、RFID解决Ҏ(gu)上有着丰富的经验?/td> |
![]() |
![]() |
![]() |