zoukankan      html  css  js  c++  java
  • 登录模块

    登录模块

    形式->后台

    首先表单初始化一个用户类

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'loginmanager.jsp' starting page</title>
        
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	<!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
    	<script type="text/javascript">
    	<% 
    	session.setAttribute("m_administrator", null);
    	%>
    	
    	</script>
      </head>
      
      <body>
      	<s:form action="loginManager.action">
      		<s:textfield label="username" name="administrator.administratorname"></s:textfield>
      		<s:password label="密码" name="administrator.administratorpwd"></s:password>
      		<s:submit value="登录"></s:submit>
      	</s:form>
      </body>
    </html>
    

    用户类的模型:

    package com.il360.infolife.model;
    
    import java.io.Serializable;
    
    /**
     * @author wangjie
     * @version 创建时间:2013-4-22 上午10:23:44
     */
    public class Administrator implements Serializable {
    	private int administratorid;
    	private String administratorname;
    	private String administratorpwd;
    	
    	public Administrator() {
    	}
    	
    	public Administrator(int administratorid, String administratorname,
    			String administratorpwd) {
    		this.administratorid = administratorid;
    		this.administratorname = administratorname;
    		this.administratorpwd = administratorpwd;
    	}
    
    	public int getAdministratorid() {
    		return administratorid;
    	}
    
    	public void setAdministratorid(int administratorid) {
    		this.administratorid = administratorid;
    	}
    	
    	public String getAdministratorname() {
    		return administratorname;
    	}
    
    	public void setAdministratorname(String administratorname) {
    		this.administratorname = administratorname;
    	}
    
    	public String getAdministratorpwd() {
    		return administratorpwd;
    	}
    
    	public void setAdministratorpwd(String administratorpwd) {
    		this.administratorpwd = administratorpwd;
    	}
    	
    }
    

    后台Action获取到表单传来的明文账号和password创建一个Administrator对象。然后依据明文password获取自己定义算法的加密后得password,将这个加密后得password与数据库保存的值进行比較,同样则登录成功。设置session,不同则又一次输入,跳转页面。

    import java.util.Map;
    
    import org.apache.struts2.ServletActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    import com.upomp.pay.sign.Password;
    
    
    public class LoginManagerAction extends ActionSupport {
    	private Administrator administrator;
    	private AdministratorService administratorService;
    	
    	public Administrator getAdministrator() {
    		return administrator;
    	}
    
    	public void setAdministrator(Administrator administrator) {
    		this.administrator = administrator;
    	}
    
    	public AdministratorService getAdministratorService() {
    		return administratorService;
    	}
    
    	public void setAdministratorService(AdministratorService administratorService) {
    		this.administratorService = administratorService;
    	}
    
    	@Override
    	public String execute() throws Exception {
    		administrator.setAdministratorpwd(Password.createPassword(administrator.getAdministratorpwd()));
    		Administrator admin = administratorService.loginManager(administrator);
    		if(null == admin){
    			return ERROR;
    		}
    		Map<String, Object> sessionMap = ServletActionContext.getContext().getSession();
    		sessionMap.put("m_administrator", admin);
    		return SUCCESS;
    	}
    }
    

    加密算法,能够是MD5:

    MD5说明:不论什么字符串进行md5加密后将得到一个16字节的字节数组,由于一个字节可由两个16进制数表示(一个字节8位,前4位表示一个16进制数,后4位表示一个16进制数),所以能够将这个16进制字节表示位32个16进制数,即32个字符,而16进制的顺序能够由一个字符数据进行映射(即以下的hexDigits),那么就能够自己定义16进制的表示。

    import java.security.MessageDigest;
    /**
     * 对密码进行加密和验证的程序
     */
    
    public class Password{
        
        //十六进制下数字到字符的映射数组
        private final static String[] hexDigits = {"0", "1", "2", "3", "4",
            "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
        
        /** *//** 把inputString加密     */
        public static String createPassword(String inputString) {
            return encodeByMD5(inputString);
        }
        
        /** *//**
         * 验证输入的密码是否正确
         * @param password    真正的密码(加密后的真密码)
         * @param inputString    输入的字符串
         * @return    验证结果,boolean类型
         */
        public static boolean authenticatePassword(String password, String inputString) {
            if(password.equals(encodeByMD5(inputString))) {
                return true;
            } else {
                return false;
            }
        }
        
        /** *//** 对字符串进行MD5加密     */
        private static String encodeByMD5(String originString) {
            if (originString != null) {
                try {
                    //创建具有指定算法名称的信息摘要
                    MessageDigest md = MessageDigest.getInstance("MD5");
                    //使用指定的字节数组对摘要进行最后更新,然后完毕摘要计算
                    byte[] results = md.digest(originString.getBytes());
                    //将得到的字节数组变成字符串返回
                    String resultString = byteArrayToHexString(results);
                    return resultString.toUpperCase();
                } catch(Exception ex) {
                    ex.printStackTrace();
                }
            }
            return null;
        }
        
        /** *//**
         * 转换字节数组为十六进制字符串
         * @param b    字节数组
         * @return    十六进制字符串
         */
        private static String byteArrayToHexString(byte[] b) {
            StringBuffer resultSb = new StringBuffer();
            for (int i = 0; i < b.length; i++) {
                resultSb.append(byteToHexString(b[i]));
            }
            return resultSb.toString();
        }
        
        /** *//** 将一个字节转化成十六进制形式的字符串     */
        private static String byteToHexString(byte b) {
            int n = b;
            if (n < 0)
                n = 256 + n;
            int d1 = n / 16;
            int d2 = n % 16;
            return hexDigits[d1] + hexDigits[d2];
        }
        /*
        public static void main(String[] args) {
            String password = Password.createPassword("infolife!@#$%^&*");
            System.out.println("对infolife!@#$%^&*用MD5摘要后的字符串:" + password);
            String inputString = "infolife!@#$%^&*";
            System.out.println("infolife!@#$%^&*与密码匹配?" + 
                    Password.authenticatePassword(password, inputString));
            inputString = "888888";
            System.out.println("888888与密码匹配?" + 
                    Password.authenticatePassword(password, inputString));
        }
        */
    }
    


    相应成功和失败后的跳转:

    		<action name="loginManager" class="loginManagerAction">
    			<result name="success" type="redirect">/index.jsp</result>
    			<result name="error">/error.jsp</result>
    		</action>

    后台管理还须要对每一个action进行推断(查看session是否实用户信息):

    	if(null == session.getAttribute("m_administrator")){
    		response.sendRedirect("loginmanager.jsp");
    	}
    


    能够将从session中获取user信息的代码写到拦截器或者过滤器里面:



    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    如何在github中的readme.md加入项目截图
    git图片无法正常显示
    PHP错误:SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
    Mac安装PHP运行环境
    YII2数据库操作出现类似Database Exception – yiidbException SQLSTATE[HY000] [2002] No such file or director
    composer 安装 Yii2遇到的BUG
    js中字节B转化成KB,MB,GB
    README.md编写教程(基本语法)
    微信扫码网页登录,redirect_uri参数错误解决方法
    记录下自己亲自做的Django项目继承QQ第三方登录
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4668439.html
Copyright © 2011-2022 走看看