请教用户认证的问题

03-05-08 coolsboy
tomcat + JONAS(J2ee) + Struts
(注:初级者)
J2ee有多种用户认证的方式
在web.xml的login-config小节里进行配置。
问题
1,用户认证必须经过login-config小节吗?能否可以像以前那样,(越过j2ee的认证机制)直接用jsp提交后,直接到数据库里认证查询,然后扔到session中?
2,我的login.jsp提交后,走到后台是什么个路线?为什么走不到LoginAction中去,就返回login.jsp页面了。没有任何错误提示。好像是和j2ee的认证有关,不知道从哪下手解决。望指教。

代码,与配置片断:
=========login.jsp================
....
<html:form action="/login" styleId="formMain" method="post" >
....
<html:form>


=========struts-config.xml================
<form-beans>
<form-bean name="loginForm"
type="com.hitachijoho.keiri.kaikei.web.struts.forms.LoginForm"/>
</form-beans>

<action path="/login"
type="com.hitachijoho.keiri.kaikei.web.struts.actions.LoginAction"
input="/login.jsp"
name="loginForm"
scope="session"
validate="false">
<forward name="success" path="/smenu.jsp"/>
</action>

=========web.xml================

<security-constraint>
<web-resource-collection>
<web-resource-name>User Area</web-resource-name>
<!-- Define the context-relative URL(s) to be protected -->
<url-pattern>/logoff.do</url-pattern>
<url-pattern>/login.do</url-pattern>
<!-- If you list http methods, only those methods are protected -->
<http-method>DELETE</http-method>
<http-method>GET</http-method>
<http-method>POST</http-method>
<http-method>PUT</http-method>
</web-resource-collection>
<auth-constraint>
<!-- Anyone with one of the listed roles may access this area -->
<role-name>user</role-name>
<role-name>manager</role-name>
</auth-constraint>
</security-constraint>

....

<login-config>
<auth-method>FORM</auth-method>
<realm-name>Kaikei Authentication Area</realm-name>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/login.jsp</form-error-page>
</form-login-config>
</login-config>

banq
2003-05-12 16:41
1.除非你使用容器的JAAS,否则不必走login-config.xml

2.你仔细参考一下Struts使用说明,会发现问题的。

blues
2003-05-13 22:11
把<html:form action="/login" styleId="formMain" method="post" >
换成
<html:form action="login" styleId="formMain" method="post" >
看看

blues
2003-05-13 22:29
把html:form action="/login" styleId="formMain" method="post"
换成
html:form action="login" styleId="formMain" method="post"
看看

HongWei
2003-05-14 14:56
如果用表单验证的话,需要在tomcat的server.xml增加一个入口,用于连接数据库:
...
<context path = "/yourPath" docBase="/yourBase" debug="0"
reloadable = "true">
<Realm className ="" debug ="99" drivername="your database driver name"
connectionURL ="your connection URL"
userNameCol="user name" userTable="user table name" userRoleTable="role table" userCredCol ="password col" userRoleTable ="user_role"
roleNameCol=""/>
<context/〉
...
不过我觉得通过form校验用户的合法性不够灵活,可以直接编写程序来实现,具体可以参考struts-example中的用户校验,它通过自定义的tld来实现,比较灵活。

coolsboy
2003-05-20 14:53
感谢各位了。
上次回帖没有成功。

试过HongWei 说的方法,数据库可以连接上,但认证通过后到下一页时候错误。现在想来是web.xml那两段得改改是把。厚厚,不知道。

我自己编程序去数据库里查询了,本点了。
我把web.xml那两段form认证的小节给删掉了。

stephen
2003-07-10 15:49
大家讨论一下这种解决方法。

http://www.mooreds.com/jaas.html

The ActionServlet Subclass

Example 12. The Overridden process Method

1 protected void process(HttpServletRequest request, \
HttpServletResponse response)
2 throws ServletException, java.io.IOException
3 {
4 String loginPage = request.getContextPath()+"/logon.do";
5 String pageReq = request.getRequestURI();
6 Permission perm = \
PermissionFactory.getInstance().getPermission(pageReq);
7 Subject subject = \
((Subject)(request.getSession().getAttribute( \
Auth.SUBJECT_SESSION_KEY)));
8 if (subject == null && \
(! request.getRequestURI().equals(loginPage))) {
9 // redirect to login page
10 } else if (subject == null && \
request.getRequestURI().equals(loginPage)) {
11 // login page is always permitted
12 super.process(request,response);
13
14 } else {
15 if ( ! AuthUtils.permitted(subject, perm) ) {
16 // subject is not permitted; redirect to error page
17 } else {
18 super.process(request,response);
19 }
20 }
21 }