web层身份验证的问题

大家好,J2EE提供了声明性安全管理是我们不用编写代码就可以对我们的资源进行管理。但是这样的话就限制了只能使用在J2EE服务器中定义的用户进行登陆,但多数情况下用户的信息是存放在数据库中的,这时该怎么做呢?怎么样才可以使用数据库中的用户信息,同时可以享受到声明性安全模型带来的便利呢?

很简单:所有的jsp都以
<%@ include file="/common/jspInclude.jsp"%>
开头。
/common/jspInclude.jsp的内容是:
----------------------------------------------
如果(从session取到用户信息对象){
//用户是合法用户
String oper_id = session里的用户信息对象的oper_id属性。
……(其他常用属性)
}否则{
//用户不合法
response.sendRedirect("login.htm");
}
--------------------------------------------
login.htm提交给一个jsp或servlet,密码正确后生成一个用户信息对象put到session里。

还可以设定一个表纪录用户对某个页面有没有权限,这样就可以在/common/jspInclude.jsp中加入对页面级的权限控制。

都以

《%@ include file="/common/jspInclude.jsp"%》

原来这里可以写jsp语句试试一个循环:
<%for(int i=0;i<10;i++) out.println("<font size="+i+">"+i+"</font>");%>

<%=request.getRemoteAddr()%>

和具体的app server实现有一定关系。比如说Tomcat是把用户信息保存在配置文件里面的,那么肯定做不到你说的功能。

而Weblogic6.x是可以做到的,可以在Weblogic6.x的console配置用户信息从数据库中读取,然后在web.xml中声明受保护的servlet/jsp就可以了,不需要在JSP里面嵌入任何代码。

但是weblogic7.x以上又不可以了,weblogic7.x以上,把用户配置来源中的数据库这一项删除了,改成了LDAP,其实用LDAP是更先进的办法。

LDAP 有问题,如果一个员工同属于多个部门,就没法描述了。
我记得 Tomcat/Weblogic 都提供了 Realm, 应该可以按照提供的接口,写相应的实现,提供各种数据接入的方式

sprsong兄没有理解我的意思,你所说的方法是现在最常用的方法,但是需要自己手动的写代码来控制对手限制资源的访问,并不是声明性安全模型。

本来我想可以写一个登陆页面,让他请求一个特殊的Servlet,然后在该Servlet中首先验证一下该用户是否是合法用户,然后再影射到weblogic中相应的角色上,再把请求forward到j_security_check上,这样就不用在app sever中定义很多用户了;或者是写一个Filter截获对j_security_check的请求,对用户输入的信息进行相应的处理。但是在weblogic中试了一下,都不成功。

我想,如果web层的标准API中可以定义一些方法来把这两者联系起来就好了。为什么weblogic要在7.0中把该功能去掉呢?

Servlet2。3规范以后,开始支持Filter,Filter是最适合做身份验证的了。

Filter在web.xml中完成配置就可,在页面中既不需要有include,也不需要有自定义标记。

不过,即使你所用的WebServer不支持servlet2.3规范,结合一些设计模式,照样可以使用Filter来完成。这样修改身份认证,甚至去掉身份认证,在不同的身份认证之间切换,都会非常容易。

希望能有所帮助。

这个基本上是做不到的,因为是服务器相关的。
还是自己实现一套最好。放在系统的单入口处就可以了

自己是现一套的话当然可以,现在的系统基本上都是这么做的,不过这样的话就不能享受到AppServer所提供的声明性安全所带来的便利了。

在Tomcat中如果通过声明性管理安全的话,也可以是数据库形式的。

比如声明一个Web应用的访问的角色是administrator,那么另外在数据库中需要建立两个表,一个是角色表,一个是用户表,将角色和用户映射起来,这是以前看的资料,自己没有试过,可以找tomcat的文档看一下。

很多appServer都支持数据库读取用户信息,把你的用户管理基于它就好了。

to talkbig:

把声明性安全都作进去不就可以了吗?
我觉得这样作总比对每个服务器实现一个adapter好的多

我想知道“AppServer所提供的声明性安全所带来的便利”是哪些便利?不知道自己做可不可以实现。