登录验证传值的问题,@阿信sxq

南燕北灰 发布于 2016/05/04 19:26
阅读 97
收藏 0

@阿信sxq 你好,想跟你请教个问题:

这个是数据表写的类

public class Dn_User implements Serializable, com.base.common.entity.Entity {
private Integer USER_ID;
private String USER_NAME;
private String PASSWORD;
private String PASSWORD_SALT;
private Integer PASSWORD_FORMAT;
private Integer ACCOUNT_STATUS;
private Integer USER_TYPE;
private Integer ACCOUNT_ID;
private Date INSERT_TIME;
private Date LAST_CHANGED;
private Integer STATUS;
private String PWD;
public String getPWD() {
return PWD;
}
public void setPWD(String pWD) {
PWD = pWD;
}
public Integer getUSER_ID() {
return USER_ID;
}
public void setUSER_ID(Integer uSER_ID) {
USER_ID = uSER_ID;
}
public String getUSER_NAME() {
return USER_NAME;
}
public void setUSER_NAME(String uSER_NAME) {
USER_NAME = uSER_NAME;
}
public String getPASSWORD() {
return PASSWORD;
}
public void setPASSWORD(String pASSWORD) {
PASSWORD = pASSWORD;
}
public String getPASSWORD_SALT() {
return PASSWORD_SALT;
}
public void setPASSWORD_SALT(String pASSWORD_SALT) {
PASSWORD_SALT = pASSWORD_SALT;
}
public Integer getPASSWORD_FORMAT() {
return PASSWORD_FORMAT;
}
public void setPASSWORD_FORMAT(Integer pASSWORD_FORMAT) {
PASSWORD_FORMAT = pASSWORD_FORMAT;
}
public Integer getACCOUNT_STATUS() {
return ACCOUNT_STATUS;
}
public void setACCOUNT_STATUS(Integer aCCOUNT_STATUS) {
ACCOUNT_STATUS = aCCOUNT_STATUS;
}
public Integer getUSER_TYPE() {
return USER_TYPE;
}
public void setUSER_TYPE(Integer uSER_TYPE) {
USER_TYPE = uSER_TYPE;
}
public Integer getACCOUNT_ID() {
return ACCOUNT_ID;
}
public void setACCOUNT_ID(Integer aCCOUNT_ID) {
ACCOUNT_ID = aCCOUNT_ID;
}
public Date getINSERT_TIME() {
return INSERT_TIME;
}
public void setINSERT_TIME(Date iNSERT_TIME) {
INSERT_TIME = iNSERT_TIME;
}
public Date getLAST_CHANGED() {
return LAST_CHANGED;
}
public void setLAST_CHANGED(Date lAST_CHANGED) {
LAST_CHANGED = lAST_CHANGED;
}
public Integer getSTATUS() {
return STATUS;
}
public void setSTATUS(Integer sTATUS) {
STATUS = sTATUS;
}
@Override
public Long getId() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setId(Long arg0) {
// TODO Auto-generated method stub

}
}

这个是一个manager来写通过sql语句去数据库查询的方法

//查询用户
public List<Dn_User> searchUser(Dn_User bean){
List<Dn_User> userList=new ArrayList();
try {

StringBuffer sql = new StringBuffer();
sql.append("SELECT * FROM DN_USER WHERE USER_NAME = "+"'snow#"+ bean.getUSER_NAME()+"';");
userList = JQDbHelperPermission.queryPlural(Dn_User.class, sql.toString(), null);
System.out.println(bean.getUSER_NAME());
} catch (Exception e) {
e.printStackTrace();
}
return userList;
}
}


这是我写的action,来写判断的逻辑

public class LoginAction extends CommonAction implements ModelDriven<Dn_User> {
private Dn_User form = new Dn_User();
public Dn_User getModel() {
return form;
}
/*
* 登录
*/
public String landed() {
if (StringUtils.isNotBlank(form.getUSER_NAME())&& StringUtils.isNotBlank(form.getPASSWORD())){
Dn_User_Manager manager = new Dn_User_Manager();
System.out.println(form.getUSER_NAME());
List<Dn_User> list = manager.searchUser(form);
if (list != null && list.size() > 0){
Dn_User user = list.get(0);
System.out.println(user.getUSER_NAME());
String salt = user.getPASSWORD_SALT();
String oldPass = user.getPASSWORD();
// 密码加密方式
String newPass = StringCode.SundearMd5(form.getPASSWORD(), salt);
if (StringUtils.isNotBlank(oldPass) && oldPass != null){
if (oldPass.equals(newPass)) {
ActionContext.getContext().getSession().put("user", user);
setJsondata(JsonResult.ajax(true, user));
return DATA;
}else{
setJsondata(JsonResult.ajax(false, 3));
return DATA;
}
}else{

String pwd = user.getPWD();

if(StringUtils.isNotBlank(pwd) && pwd!=null){
//密码加密方式
System.out.println("2执行");
String pwdMD = StringCode.SundearMd5(form.getPASSWORD());
if(pwd.equals(pwdMD)){
ActionContext.getContext().getSession().put("user", user);
setJsondata(JsonResult.ajax(true, user));
return DATA;
}else{
if (StringCode.encrypt(form.getPASSWORD()).equals(user.getPASSWORD())){
ActionContext.getContext().getSession().put("user", user);
setJsondata(JsonResult.ajax(true, user));
return DATA;
}else{
setJsondata(JsonResult.ajax(false, 3));
return DATA;
}
}
}else{
setJsondata(JsonResult.ajax(false, 3));
return DATA;

}
}
}else{
// 用户名不存在
setJsondata(JsonResult.ajax(false, "1"));
return DATA;
}
}
return LOGIN;
}

}

这个是登录的jsp



<title>登录页</title>
</head>
<link href="<%=path %>/exchangeWine/assets/css/common.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="<%=path %>/exchangeWine/assets/js/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="<%=path %>/exchangeWine/assets/js/jquery.validate.js"></script>
<script type="text/javascript" src="<%=path %>/meituan/resource/js/interaction.js"></script>
<body style="background-color:#f0f0f0;">
    <div class="mth1"></div>
    <div class="register">
    <form  id="registerForm" name="registerForm" method="post">
   <div class="mid mt10" style="width:80%;">
     <span class="registerinputlabel">用户名</span><span><img id="registericon1" class="registerinputicon" src="assets/images/registericon1.png"/></span>
     <input type="tel" id="registermobile" name="registermobile" style="width:80%;" maxlength="11" value="" />
   </div>
   <div class="mid mt10" style="width:80%;">
     <span class="registerinputlabel">密码 </span><%-- <span><img id="registericon2" class="registerinputicon" style="width:24px;" src="resource/images/registericon2.png"/></span> --%>
     <input type="password" id="registerkeyword" name="registerkeyword" style="width:80%;"/>
     <label class="keywordtip"></label>
     <br/><label class="error" for="registerkeyword"></label>
   </div>
   <s:hidden id="USER_NAME" name="USER_NAME"></s:hidden>
   <s:hidden id="PASSWORD" name="PASSWORD"></s:hidden>
    </form>
    <div class="mid mt10" style="width:80%;">
      <input type="button"   style="color:#fff;font-size:16px; background:#00811b;border:none;border-radius:2px; width:100%; text-align:center" value="立即登录" readonly="readonly" onclick="checkLogin()" />
    </div>
    </div>
</body>
<script type="text/javascript">


//登录校验
var checkLogin = function (){
if(!($('#registermobile').val()!=null && $('#registermobile').val().length>0)){
alert("您输入的用户名不能为空!");
    return false;
}else if(!($('#registerkeyword').val()!=null && $('#registerkeyword').val().length>0)){
alert("您输入的密码不能为空!");
 return false;
}
$("#PASSWORD").val($('#registerkeyword').val());
$("#USER_NAME").val($('#registermobile').val());
$.ajax({
async:false,
type:"post",
data:$('#registerForm').serialize(),
url:"<%=path%>/wine/login!landed",
dataType:"json",
success:function(json){
if(json.success){
window.location.href="<%=path%>/wine/index!execute";
}else{
   if(json.msg=='1'){
alert("用户名不存在");
}else if(json.msg=='2'){
alert("用户已被注销");
}else if (json.msg=='3'){
alert("用户密码错误");
}else if (json.msg=='6'){
alert("请先绑定手机号");
var s = $('#registermobile').val();
window.location.href="<%=path%>/wine/index.jsp?s="+s;
}else{
alert("数据加载失败!");
}
}
},
error:function(){
alert("数据加载失败!");
}
}); 
}
</script>
</html>


 正常的流程应该是在这个jsp页面中设置了隐藏标签用来传值到后台action,在后台action中建了一个user类的form对象来接收传过来的值,把form作为参数传给manager中的serchuser方法,这时候不是通过sql语句把form的getusername作为条件去数据库中查询,然后返回一个存储user对象的list吗,之后在action中通过list.get(0)取出user对象,这个user对象里面本应该存着从数据库中查到的数据吧,但是我的程序里面user对象的变量值全是null啊?为什么

加载中
0
阿信sxq
阿信sxq
代码太烂了,这真的是公司在用的代码?不敢相信啊
0
阿信sxq
阿信sxq
你跟踪一下,看看查询的结果是什么,是不是本来就没有结果
0
南燕北灰
南燕北灰

引用来自“阿信sxq”的评论

代码太烂了,这真的是公司在用的代码?不敢相信啊
....这个是我照着写的,应该是这一步出了问题,


sql.append("SELECT * FROM DN_USER WHERE USER_NAME = "+"'snow#"+ bean.getUSER_NAME()+"';");
userList = JQDbHelperPermission.queryPlural(Dn_User.class, sql.toString(), null);
System.out.println(userList.get(0).getUSERNAME());
我这里加了一个打印语句想看看user有没有值,但是这步就是null
阿信sxq
阿信sxq
你注意一下,get出来的值是多少,如果这里get出来了值,但是值不对,那你要看看是不是处理有问题。 就算都对,登录也不应该这么写吧
0
南燕北灰
南燕北灰

引用来自“阿信sxq”的评论

代码太烂了,这真的是公司在用的代码?不敢相信啊

引用来自“南燕北灰”的评论

....这个是我照着写的,应该是这一步出了问题,


sql.append("SELECT * FROM DN_USER WHERE USER_NAME = "+"'snow#"+ bean.getUSER_NAME()+"';");
userList = JQDbHelperPermission.queryPlural(Dn_User.class, sql.toString(), null);
System.out.println(userList.get(0).getUSERNAME());
我这里加了一个打印语句想看看user有没有值,但是这步就是null

既然他们让我这么写,我就这样写了,

StringBuffer sql = new StringBuffer();
sql.append("SELECT * FROM DN_USER WHERE USER_NAME = "+"'snow#"+ bean.getUSER_NAME()+"';");
userList = JQDbHelperPermission.queryPlural(Dn_User.class, sql.toString(), null);
这个queryPlural(Dn_User.class, sql.toString(), null);方法,

public static <T> List<T> queryPlural(Class<T> t, String sql, Object... param) throws Exception {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
List<T> list = new ArrayList<T>();
try {
conn = getConnection();
stmt = conn.prepareStatement(sql);
setParameters(stmt, param);
rs = stmt.executeQuery();
while (rs.next()) {
list.add(instance(t, rs, sql));
}
}catch(Exception e){
e.printStackTrace();
} finally {
replease(conn, stmt, rs);
}
return list;
}
返回的list里面的对象的变量值全是null,但是为什么是null,我就不知道了,想不明白是哪里的错

求是科技
求是科技
回复 @南燕北灰 : 查看log,查看传入参数有没有问题,查看配置输出是不是对应的那个list里面的实体类,估计就是入参/出参问题
南燕北灰
南燕北灰
回复 @求是科技 : 我在数据库中用这个sql语句可以查到数据,那应该是这sql语句没错了,
求是科技
求是科技
如果纯sql正确,传进去的查询语句也正确的话,你需要查看下查询的配置文件了,一般是入参或者出参方面的设置问题
返回顶部
顶部