ios或者安卓在登入的时候为了统一校验,一般的的情况下会到一个共同的接口进行检验,这里用java做了一个简单的后台接口用于ios或者安卓登入校验。后台的java框架是SSM框架。
下边是校验的流程:
使用的maven,以下是pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.demo</groupId>
<artifactId>login-mobile</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<!-- json处理 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.5</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.6</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.9.5</version>
</dependency>
<!-- Mapper -->
<dependency>
<groupId>com.github.abel533</groupId>
<artifactId>mapper</artifactId>
<version>2.3.4</version>
</dependency>
<!-- ldap -->
<dependency>
<groupId>org.springframework.ldap</groupId>
<artifactId>spring-ldap-core</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- jsp -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<!-- 数据库 -->
<!-- <dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
</dependency> -->
<!-- 连接池 -->
<!-- <dependency>
<groupId>com.jolbox</groupId>
<artifactId>bonecp-spring</artifactId>
</dependency> -->
<!-- 导入Mysql数据库链接jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
</dependencies>
</project>
web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>login</display-name>
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>login</param-value>
</context-param>
<!-- 加载log4j的配置文件 -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:properties/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<!-- 加载spring相关配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext*.xml</param-value>
</context-param>
<!-- spring applicationContext载入 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 编码过滤器,以UTF8编码 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置springMVC -->
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springMVC-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- welcome file -->
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
package com.demo.login.pojo;
public class User {
//id
private Long id;
//user_id
private String userId;
private String passWord;
//token
private String token;
//device_id
private String deviceId;
//msg_uid
private String msgUid;
//version
private String version;
//token_date
private String tokenDate;
//os_type
private String osType;
public String getOsType() {
return osType;
}
public void setOsType(String osType) {
this.osType = osType;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getDeviceId() {
return deviceId;
}
public void setDeviceId(String deviceId) {
this.deviceId = deviceId;
}
public String getMsgUid() {
return msgUid;
}
public void setMsgUid(String msgUid) {
this.msgUid = msgUid;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getTokenDate() {
return tokenDate;
}
public void setTokenDate(String tokenDate) {
this.tokenDate = tokenDate;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
@Override
public String toString() {
return "User [id=" + id + ", userId=" + userId + ", token=" + token + ", deviceId=" + deviceId + ", msgUid="
+ msgUid + ", version=" + version + ", tokenDate=" + tokenDate + ", osType=" + osType + "]";
}
}
package com.demo.login.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.demo.login.pojo.User;
import com.demo.login.service.LoginService;
@RestController
@RequestMapping(value="login")
public class LoginController {
@Autowired
public LoginService loginService;
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> login(User user){
Map<String, Object> map = new HashMap<String, Object>();
try {
map = loginService.login(user);
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
}
service层的实现类:
package com.demo.service.login.impl;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.demo.login.mapper.LoginMapper;
import com.demo.login.pojo.User;
import com.demo.login.service.LoginService;
import com.demo.login.util.CodeStatus;
import com.demo.login.util.SystemStatus;
import com.demo.login.util.UUIDUtil;
@Service
public class LoginServiceImpl implements LoginService {
@Autowired
public LoginMapper loginMapper;
@Override
public Map<String, Object> login(User user) throws Exception {
//登入校验返回的数据
Map<String, Object> map = new HashMap<String, Object>();
//校验数据
if (user != null) {
if (StringUtils.isBlank(user.getDeviceId())) {
map.put("code", CodeStatus.FAIL);
map.put("status", SystemStatus.SUCCESS);
map.put("data", "");
map.put("msg", "deviceId字段不能为空");
return map;
}
if (StringUtils.isBlank(user.getMsgUid())) {
map.put("code", CodeStatus.FAIL);
map.put("status", SystemStatus.SUCCESS);
map.put("data", "");
map.put("msg", "msgUid字段不能为空");
return map;
}
if (StringUtils.isBlank(user.getVersion())) {
map.put("code", CodeStatus.FAIL);
map.put("status", SystemStatus.SUCCESS);
map.put("data", "");
map.put("msg", "version字段不能为空");
return map;
}
if (StringUtils.isBlank(user.getOsType())) {
map.put("code", CodeStatus.FAIL);
map.put("status", SystemStatus.SUCCESS);
map.put("data", "");
map.put("msg", "osType字段不能为空");
return map;
}
}else{
return map;
}
//1.1token登入
int tokenCount = loginMapper.validateByToken(user);
if (tokenCount == 1) {
//若token校验成功,则登入成功
map.put("code", CodeStatus.SUCCESS);
map.put("status", SystemStatus.SUCCESS);
//TODO 这里data可以获取登入返回的数据,比如权限数据等
map.put("data", "this login by token");
map.put("msg", "token校验成功");
return map;
}else{//1.2账号和密码登入
//1.2.1校验,可以用其他的方式校验,比如ldap
int userIdCount = 0;
if (StringUtils.isNoneBlank(user.getPassWord()) && StringUtils.isNoneBlank(user.getUserId())) {
userIdCount = loginMapper.login(user);
}else{
map.put("code", CodeStatus.FAIL);
map.put("status", SystemStatus.SUCCESS);
map.put("data", "");
map.put("msg", "用户名密码字段不能为空");
return map;
}
if (userIdCount == 1) {//校验成功
//token表中插入或更新数据
user.setToken(UUIDUtil.getUuid());
loginMapper.insertOrUpdate(user);
map.put("code", CodeStatus.SUCCESS);
map.put("status", SystemStatus.SUCCESS);
//TODO 这里data可以获取登入返回的数据,比如权限数据等
map.put("data", "this login by token");
map.put("msg", "账号和密码校验成功");
return map;
}else{
map.put("code", CodeStatus.FAIL);
map.put("status", SystemStatus.SUCCESS);
//TODO 这里data可以获取登入返回的数据,比如权限数据等
map.put("data", "this login by userId and password");
map.put("msg", "账号或密码校验失败");
return map;
}
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.login.mapper.LoginMapper">
<select id="validateByToken" parameterType="com.demo.login.pojo.User" resultType="java.lang.Integer">
select count(id) from mobile_login where token=#{token}
</select>
<select id="login" parameterType="com.demo.login.pojo.User" resultType="java.lang.Integer">
select count(user_id) from user where user_id = #{userId} and pass_word = #{passWord}
</select>
<insert id="insertOrUpdate" parameterType="com.demo.login.pojo.User">
INSERT INTO
mobile_login(user_id,token,device_id,msg_uid,version,token_date,os_type)
VALUES
(
#{userId}
,#{token}
,#{deviceId}
,#{msgUid}
,#{version}
,date_add(NOW()
,interval 10080 minute)
,#{osType}
) ON DUPLICATE KEY UPDATE
token = #{token}
,device_id = #{deviceId}
,msg_uid = #{msgUid}
,version = #{version}
,os_type = #{osType}
</insert>
</mapper>
数据库建表语句:
DROP TABLE IF EXISTS `mobile_login`;
CREATE TABLE `mobile_login` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` char(20) NOT NULL,
`token` varchar(50) DEFAULT NULL,
`device_id` varchar(100) DEFAULT NULL,
`msg_uid` varchar(100) DEFAULT NULL,
`version` varchar(20) DEFAULT NULL,
`token_date` date DEFAULT NULL,
`os_type` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_id_unique` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` char(50) DEFAULT NULL,
`user_name` varchar(50) DEFAULT NULL,
`pass_word` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
关键的代码都在这上边了,感兴趣的小伙伴可以观看我录制的视频:
http://v.youku.com/v_show/id_XMzMxNzc1NDM5Mg==.html?spm=a2h3j.8428770.3416059.1