首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

struts2登录 权限验证有关问题

2012-03-13 
struts2登录 权限验证问题struts.xml文件XML code!DOCTYPE struts PUBLIC-//Apache Software Foundation

struts2登录 权限验证问题
struts.xml文件

XML code
<!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd">    <struts>    <package name="main" extends="struts-default">        <interceptors>            <interceptor name="authentication" class="interceptor.AuthorizationInterceptor"/>                        <interceptor-stack name="myStack">                <interceptor-ref name="defaultStack"/>                <interceptor-ref name="authentication"/>            </interceptor-stack>        </interceptors>                        <action name="adminAction" class="action.AdminAction">            <result name="admin">admin.jsp</result>            <result name="login">login.jsp</result>            <interceptor-ref name="myStack" />        </action>                </package></struts>

文件结构

拦截器类文件
Java code
package interceptor;import com.opensymphony.xwork2.*;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;import java.util.*;public class AuthorizationInterceptor extends AbstractInterceptor {    @Override    public String intercept(ActionInvocation invocation) throws Exception {        // TODO Auto-generated method stub        ActionContext ctx = invocation.getInvocationContext();        Map session = ctx.getSession();        String user = (String)session.get("username");        if(user!=null && "admin".equals(user))            return invocation.invoke();        else            return Action.LOGIN;    }}

AdminAction.java文件
Java code
package action;import com.opensymphony.xwork2.ModelDriven;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ActionContext;import java.util.*;import dao.AdminDAO;import java.io.IOException;import java.io.PrintWriter;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;import java.lang.*;public class AdminAction extends ActionSupport{    private String name;    private String password;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }        public String execute() throws Exception    {        String adminname=null;        String adminpassword=null;        String driverClass = "com.mysql.jdbc.Driver";        String dburl = "jdbc:mysql://localhost:3306/cms_lawyer?characterEncoding=UTF-8";        String dbuser = "root";        String dbpassword = "12345678";        Connection conn=null;        System.out.println("before");         try            {                Class.forName(driverClass);            }            catch(ClassNotFoundException ce)            {                      System.out.println("faild");            }            try            {                 conn=DriverManager.getConnection(dburl,dbuser,dbpassword);            }            catch(SQLException se)            {                }                  AdminDAO admindao = new AdminDAO();            System.out.println("jdfhj12345");            try               {                adminpassword = admindao.getPassword(conn, name);                    }            catch(Exception e)            {                            }            System.out.println("dsfh"+password);            if(adminpassword.equals(password))            {                Map session = ActionContext.getContext().getSession();                if(session != null)                    session.put("username", name);                return "admin";            }            else            {                return "login";            }      }} 


login.jsp
Java code
<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="struts" uri="/struts-tags"%><html>    <head>        <title>alsdkfj</title>        <struts:head theme="ajax" />    </head>    <body>        <struts:form action="adminAction">            <struts:textfield label="用户名" name="name"/>            <struts:password label="密码" name="password"/>            <struts:submit value="denglu"/>        </struts:form>    </body></html>

AdminDAO.java文件
Java code
package dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class AdminDAO {    public String getPassword(Connection conn,String name) throws SQLException    {        PreparedStatement preStmt = null;        ResultSet rs = null;                String getpassword = "select user_password from admin where user_name = ? ";        try        {            preStmt = conn.prepareStatement(getpassword);                        int index=1;                        preStmt.setString(index, name);            rs = preStmt.executeQuery();                        if (rs.next())            {                String pw = rs.getString("user_password");                return pw;            }            else            {                return null;            }        }        finally        {            if(rs != null) rs.close();            if(preStmt != null)preStmt.close();            if(conn != null) conn.close();        }    }}

现在在login.jsp中提交之后 不跳转,但是url变了,而且AdminAction.java中的System.out.println都没有输出来。不知代码哪里有问题。
请问大侠 如何才能实现登录成功之后跳转到admin.jsp而未登录用户不能访问admin.jsp页面。
指点清楚之后追加得分,谢谢!!

[解决办法]
你这样做的话把loginAction也拦截了
加上
if(invocation.getAction().getClass().getName().equals("interceptor.AuthorizationInterceptor"))
return invocation.invoke();
[解决办法]
debug断点一下,看看到底什么是null
[解决办法]
提交后不跳转应该是你走了 return "login";这一条分支,所以页面又跳转回了你的登陆页面。。。这样就该是DAO中出了问题!!!要验证这一点,,把<result name="login">login.jsp</result>
中的Jsp页面换掉试试就知道了。。。
[解决办法]
在AdminAction的excute方法断点试试
[解决办法]
登陆的时候session哪来的username?应该从request中获取吧?

热点排行