Happy 牛Year!    
简体中文
会员名称: 登入密码: [Register] 注册 忘记密码 启用我的帐号
单点登录问题,怎样整合我的应用和jforum论坛(两个不同的应用)  XML
论坛首页 »开源项目» JForum论坛
发表人 内容
icewolf819

[Avatar]

注册时间: 2007-09-20 10:59:31
文章: 6
离线

我的应用是用struts2+spring+hibernate+weblogic。参考了一些单点登录的帖子,但是不能实现。请各位大虾帮忙解决:
我的应用登录页面处理的action代码为:

我的登录页面URL为:http://172.16.255.2:7001/yl_portal/entrance.jsp

jfroum论坛用的web服务器是tomcat,我在SystemGlobals.properties配置文件添加了:
authentication.type = sso
sso.implementation = com.trydone.forum.sso.SimpleSSOImpl
sso.redirect = http://172.16.255.2:7001/yl_portal/entrance.jsp
sso.cookie.name=my_application_cookie_name

sso实现我使用了你们写的一段代码com.trydone.forum.sso.SimpleSSOImpl,代码为:

但是对里面的实现不太理解:
1.请问authenticateUser方法的作用是什么,返回的是我自己登录页面的url吗?
2.isSessionValid方法是什么时候调用的,是否是判断用户有没有登录?

现在的问题是我的应用的username怎么加到cookie中,而jforum论坛的应用怎么取到这个cookie然后自动用这个username登录进论坛。请论坛的牛人帮忙解决。在此,万分感激!!!

这篇文章被编辑了 3 次. 最近一次更新是在 2007-10-14 12:06:40


欢迎回复。热烈欢迎。热泪欢迎!!!
[MSN] [ICQ]
pinke

[Avatar]

注册时间: 2006-11-18 22:27:35
文章: 809
离线
性别: 男
出生:1982-06-18


1.请问authenticateUser方法的作用是什么,返回的是我自己登录页面的url吗?
2.isSessionValid方法是什么时候调用的,是否是判断用户有没有登录?

现在的问题是我的应用的username怎么加到cookie中,而jforum论坛的应用怎么取到这个cookie然后自动用这个username登录进论坛。请论坛的牛人帮忙解决。在此,万分感激!!!


1 authenticateUser 是当用户访问JForum时验证用户名,返回一个正确的用户名时为已经登陆
2 isSessionValid 应该是在JForum已经登陆的用户,当Session超时时去验证用户是否有效吧
你的应用的username 由你的应用去写cookie
jforum取你的cookie值可以在authenticateUser 中去取 可以用jfourm取的方法是用ControllerUtils.getCookie(name)

享我所想,乐你所乐
[MSN] Tencent QQ:44020567
icewolf819

[Avatar]

注册时间: 2007-09-20 10:59:31
文章: 6
离线

我在我的loginAction中加的这段代码
Cookie cookie = new Cookie("my_application_cookie_name", username);
cookie.setPath("/");
cookie.setMaxAge(-1);
httpResponse.addCookie( cookie);


以及SystemGlobals.properties中添加的
authentication.type = sso
sso.implementation = com.trydone.forum.sso.SimpleSSOImpl
sso.redirect = http://172.16.255.2:7001/yl_portal/entrance.jsp
sso.cookie.name=my_application_cookie_name
是对的吗?

加了这两段程序是否就能实现我的应用和jforum论坛的单点登录?

请问还要加其他的代码吗?有没有什么配置文件要添加?

还有如何知道通过cookie jfroum已经取得我的应用的username.取得用户名然后怎么做呢,是否就自动登录进论坛了啊?
请问这段代码的用途:
remoteURL = "http://172.16.255.2:7001/yl_portal/entrance.jsp?username=" + myapp_userid; ------------------请问这里是写我登录页面的url吗?

try {
Document doc = new SAXBuilder().build(new URL(remoteURL));
Element el = doc.detachRootElement();
List list;
list = el.getChildren("isLogin");
Element element;

element = (Element) list.get(0);
if (element.getValue().equals("true")) {
list = el.getChildren("name");
element = (Element) list.get(0);
return element.getValue();
}
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//如果你的论坛必须要用户登后才行的话加上这行
JForumExecutionContext.setRedirect(SystemGlobals.getValue(ConfigKeys.SSO_REDIRECT));
return null;-------------------------------------为什么要返回null呢?

请pinke大哥说的详细点啊?

这篇文章被编辑了 4 次. 最近一次更新是在 2007-10-14 14:28:33


欢迎回复。热烈欢迎。热泪欢迎!!!
[MSN] [ICQ]
pinke

[Avatar]

注册时间: 2006-11-18 22:27:35
文章: 809
离线
性别: 男
出生:1982-06-18

你用Cookie的话就不要用这个类了。这个类是在没有cookie的情况下通过服务器之间进行验证

你自己写个类
实现方法类似:如下

这篇文章被编辑了 1 次. 最近一次更新是在 2007-10-14 15:55:09


享我所想,乐你所乐
[MSN] Tencent QQ:44020567
icewolf819

[Avatar]

注册时间: 2007-09-20 10:59:31
文章: 6
离线

呵呵,谢谢pinke.
我还有一个问题,cookie是不是只能用在一个应用中?两个应用好像要配很多东西的吧。

是否通过cookie.setPath("/") 把我的应用的cookie放到jfroum论坛可以取的地方?具体应该怎么设置呢?(setpath方法的实参应该怎么写?)

另外还要配置其他地方吗?

欢迎回复。热烈欢迎。热泪欢迎!!!
[MSN] [ICQ]
pinke

[Avatar]

注册时间: 2006-11-18 22:27:35
文章: 809
离线
性别: 男
出生:1982-06-18

cookie.setPath("/")IE中应该是无限制的,多站也是可以访问的,
同域名的话可以设置域名安全些
比如:
forum.trydone.com
app.trydone.com
可以设置域为 trydone.com

具体你可以自己做个测试,很简单,用两个TOMCAT,开两个不同port测试一下:)

享我所想,乐你所乐
[MSN] Tencent QQ:44020567
yinxiaoyi


注册时间: 2007-10-30 09:27:20
文章: 1
离线

public class SimpleSSOImpl implements SSO { // 必须实现接口 net.jforum.sso.SSO

static final Logger logger = Logger.getLogger(SimpleSSOImpl.class.getName()); // 初始化日志接口

public String authenticateUser(RequestContext request) {
//这里是处理你的程序,取得你的系统中已经登陆的用户名,如果没有登陆就返回null 有登陆返回你的程序中已经登陆的用户名

return getMyApplicationUserid(request);
}

public boolean isSessionValid(UserSession userSession, RequestContext request) {// 实现接口方法(必须)

//重新读取程序中的用户状态
String remoteUser = getMyApplicationUserid(request);

// 用户已经退出
if (remoteUser == null &&
userSession.getUserId() != SystemGlobals.getIntValue(ConfigKeys.ANONYMOUS_USER_ID)) {
return false;

// 用户已经登陆

} else if (remoteUser != null &&
userSession.getUserId() == SystemGlobals.getIntValue(ConfigKeys.ANONYMOUS_USER_ID)) {
return false;

// user has changed user
} else if (remoteUser != null && !remoteUser.equals(userSession.getUsername())) {
return false;
}
return true; // myapp user and forum user the same
}

/**
* 这里是处理你的程序
* 取得你的系统中已经登陆的用户名
* 1)如果没有登陆就返回null
* 2)有登陆返回你的程序中已经登陆的用户名
* 这里采用jdom取远程你的程序的一个XML结果进行验证
* XML的格式为:
* <?xml version=\"1.0\" encoding=\"UTF-8\" ?>
* <user>
* <name>pinke</name> <!-- 用户名 -->
* <isLogin>false</isLogin> <!-- true 为已经登 false为末登 -->
* </user>
*
* @param request RequestContext
* @return String
*/
public String getMyApplicationUserid(RequestContext request) {

String myapp_userid;
//取程序上登陆过的用户名,我们程序存放用户名的cookie名称为"my_application_cookie_name"
Cookie mycookie = net.jforum.ControllerUtils.getCookie("my_application_cookie_name");

//mycookie=null时说明没有事先在应用程序中登陆过(这里假设应该程序登陆后把登陆名存入cookie中)
//注意应该程序cookie的path必须设置为/,或在同域名下可以设置为域名,否则取不到cookie
if (mycookie == null || mycookie.getValue() == null || mycookie.getValue().length() == 0) {
return null;
}
myapp_userid = mycookie.getValue();
System.out.println(myapp_userid);

//JForumExecutionContext.setRedirect(SystemGlobals.getValue(ConfigKeys.SSO_REDIRECT));
return myapp_userid;
}
tommi2008


注册时间: 2008-11-17 10:15:19
文章: 1
离线

最近做了个应用,想把jforum集成在一起,按照前面版主给的方案,配了个单点登陆,我用了两个tomcat,从一个应用(我的应用系统struts+oracle)的某个图标设为跳转连接到另一个应用(jforum),,方法是加了CookieUserSSO,在我的应用登陆类里加了
Cookie cookie = new Cookie("JforumSSO", username);
cookie.setMaxAge(-1);
response.addCookie(cookie);
配置文件SystemGlobals.properties
sso.redirect = http://localhost:8080/webapp
sso.implementation = net.jforum.sso.CookieUserSSO
authentication.type = sso
,运行结果是点击页面跳转到论坛里,刚开始以一个用户身份登陆论坛时点了自动登陆(seesion得到了保存),当访问业务系统时,那个用户在业务系统里点击按钮能跳到该用户的论坛,可是在业务系统里注销了用户,换成以另外的用户身份登陆时却不能显示为当前的用户,显示为上一个用户,而且当进了用户后就不能返回了。
我的访问页面
<a href="http://localhost:9001/JForum/">
我把com,net两个class放进了业务系统的工程里WEBINF/class,templates放在webRoot里,加上jforum所有的配置文件放进config里,请问还要加什么东西,才能得到他们的seesion呢?
就是说得到同一个用户,还有就是假如你不登入一次论坛,从业务系统里,就拿不到它的seesion.
请问如何把两个应用放在一起呢?
实现真正的单点登陆呢?
 
论坛首页 »开源项目» JForum论坛
前往:   
Powered by JForum 2.1.8 © JForum Team ICP:闽ICP备06052876号 Template:TryDone