shiro验证登陆

SSM+shiro整合后


1.创建user实体类
2.写userDao接口,userMapper
3.写userService接口和它的实现类
4.userController判断

userDao:

package com.dt.dao;


import java.util.List;
import java.util.Map;


import com.dt.beans.User;


public interface UserDao {


/**
* 获取用户信息
* @param params
* @return
*/
public List<User> getUserInfo(Map<String,Object> params);

/**
* 用户注册
* @param params
* @return
*/
public int addUser(Map<String,String> params);

/**
* 根据用户名查询
*/
public List<User> getUserInfoByUsername(Map<String,String> params);

}

userMapper:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.dt.dao.UserDao">




<insert id="addUser" parameterType="java.util.Map">
insert into fa_user(username,password,phone) values (#{username},#{password},#{phone});
</insert>

<sql id="user">
userId,username,password,nickName,realName,sex,phone,updateTime
</sql>




<select id="getUserInfo" parameterType="java.util.Map" resultType="com.dt.beans.User">
SELECT <include refid="user"/> FROM fa_user
<where>
<if test="userId!=null and userId!=0">
userId=#{userId}
</if>
<if test="username!=null and username!=''">
AND username like CONCAT('%',#{username},'%')
</if>
<if test="nickName!=null and nickName!=''">
AND nickName like CONCAT('%',#{nickName},'%')
</if>
<if test="realName!=null and realName!=''">
AND realName like CONCAT('%',#{realName},'%')
</if>
<if test="sex!=null and sex!=''">
AND sex = #{sex}
</if>
<if test="phone!=null and phone!=''">
AND phone like CONCAT('%',#{phone},'%')
</if>
</where>
</select>

<select id="getUserInfoByUsername" parameterType="java.util.Map" resultType="com.dt.beans.User">
select <include refid="user"/> from fa_user where username=#{username}
</select>
</mapper>

userService.java


package com.dt.service;


import java.util.List;
import java.util.Map;


import com.dt.beans.User;


import net.sf.json.JSONObject;


public interface UserService {

/**
* 获取用户信息
* @param params
* @return
*/
public List<User> getUserInfo(Map<String,Object> params);

/**
* 根据用户名查询
*/
public List<User> getUserInfoByUsername(Map<String, String> map);

/**
* 用户注册
* @param params
* @return
*/
public int addUser(Map<String,String> params);

/**
* 用户普通登录服务处理
*/
public Object login(JSONObject json);


}


userServiceImpl.java   

package com.dt.service.Imp;


import java.util.HashMap;
import java.util.List;
import java.util.Map;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


import com.dt.beans.User;
import com.dt.dao.UserDao;
import com.dt.result.RequestResult;
import com.dt.result.ResultCodeUtil;
import com.dt.service.UserService;
import com.dt.tools.AssertUtils;
import com.dt.tools.Constant;
import com.dt.tools.JWT;
import com.dt.tools.RedisCache;


import net.sf.json.JSONObject;
@Service
public class UserServiceImpl implements UserService{


@Autowired
UserDao userDao;


@Override
public int addUser(Map<String, String> params) {
// TODO Auto-generated method stub
int i = userDao.addUser(params); 
return i;
}




@Override
public List<User> getUserInfo(Map<String, Object> params) {
// TODO Auto-generated method stub
return userDao.getUserInfo(params);
}


/**
* 根据用户名查询
*/
public List<User> getUserInfoByUsername(Map<String,String> params){
// TODO Auto-generated method stub
        return userDao.getUserInfoByUsername(params);
}


@Override
public Object login(JSONObject json) {
// TODO Auto-generated method stub
//*****************验证必传参数*****************
String[] required_params={"username","password"};
boolean params_complete = AssertUtils.assertParamsComplete(required_params, json);//根据方法不同,设置不同的必传参数

if(!params_complete)

 return new RequestResult(ResultCodeUtil._104,ResultCodeUtil.getMsg("104"));

//*****************验证必传参数*****************
@SuppressWarnings("unchecked")
Map<String,Object>params = json;
Map<String, Object> result = new HashMap<String, Object>();
List<User> userList = userDao.getUserInfo(params);
if(userList==null || userList.size()==0)
{
return new RequestResult(ResultCodeUtil._108, ResultCodeUtil.getMsg(ResultCodeUtil._108));
}
User user = userList.get(0);
// 给用户jwt加密生成token
String token = JWT.sign(user, Constant.userCachTimeLong);
result.put("userToken", token);
result.put("username", user.getUsername());
result.put("user", user);
try {
params.put("userId", user.getUserId());
RedisCache.putCacheWithExpireTime(token, user, Constant.userCachTimeLong);
} catch (Exception e) {
e.printStackTrace();
}
return new RequestResult(ResultCodeUtil._100, ResultCodeUtil.getMsg("100"), result);
}
}

LoginController.java


package com.dt.controller;


import java.io.IOException;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import javax.servlet.http.HttpServletResponse;


import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;


import com.dt.beans.User;
import com.dt.result.RequestResult;
import com.dt.result.ResultCodeUtil;
import com.dt.service.UserService;
import com.dt.sms.SmsSend;
import com.dt.sms.SmsSendResponse;
import com.dt.tools.Constant;
import com.dt.tools.JWT;
import com.dt.tools.MD5Util;
import com.dt.tools.RedisCache;
import com.dt.tools.VerifyCodeUtils;


import net.sf.json.JSONObject;


@Controller
@RequestMapping("/user")
public class LoginController {


@Autowired
UserService userService;
@Autowired
HttpServletResponse response;


/**
* 用户注册

* @param json
* @return
*/
@RequestMapping(value = "/register", method = RequestMethod.POST)
@ResponseBody
public Object register(@RequestBody JSONObject json) {
String username = json.getString("username");
String password = json.getString("password");
String confirmPassword = json.getString("confirmPassword");
String phoneVerification = json.getString("phoneVerification");
Map<String, String> params = new HashMap<String, String>();
Map<String, Serializable> result = new HashMap<String, Serializable>();
Map<String, String> map = new HashMap<String, String>();
try {
String check = RedisCache.getCache(username);
if (check == null) {
return new RequestResult(ResultCodeUtil._117, ResultCodeUtil.getMsg(ResultCodeUtil._117));
} else if (check.equals(phoneVerification)) {
if (password.equals(confirmPassword)) {
User user = new User();
password = MD5Util.MD5(MD5Util.MD5(password));
user.setUsername(username);
user.setPassword(password);
user.setPhone(username);
params.put("username", user.getUsername());
params.put("password", user.getPassword());
params.put("phone", user.getPhone());
map.put("username", user.getUsername());
List<User> userList = userService.getUserInfoByUsername(map);
if (userList.size()==0) {
userService.addUser(params);
try {
// 给用户jwt加密生成token
String token = JWT.sign(user, Constant.userCachTimeLong);
result.put("userToken", token);
result.put("username", user.getUsername());
result.put("user", user);
try {
RedisCache.putCacheWithExpireTime(token, user, Constant.userCachTimeLong);
} catch (Exception e) {
e.printStackTrace();
}
return new RequestResult(ResultCodeUtil._100, ResultCodeUtil.getMsg(ResultCodeUtil._100),
result);
} catch (Exception e) {
e.printStackTrace();
}
}
else{
return new RequestResult(ResultCodeUtil._10002,ResultCodeUtil.getMsg(ResultCodeUtil._10002));
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return new RequestResult(ResultCodeUtil._110, ResultCodeUtil.getMsg(ResultCodeUtil._110));
}


/**
* 获取登陆验证码

* @param json
* @return
*/
@ResponseBody
@RequestMapping(value = "/getVerificationCode", method = RequestMethod.POST)
public Object adminGetVerificationCode(@RequestBody JSONObject json) {
// 判断图形验证码是否正确
try {
String username = json.getString("username");
String capchaId = json.getString("capchaId");
String imgVerificationCode = json.getString("imgVerificationCode");
String check = RedisCache.getCache(capchaId);
// 转换为小写
check = check.toLowerCase();
imgVerificationCode = imgVerificationCode.toLowerCase();
boolean isDigit = username.matches("[0-9]{1,}");
// 正确才发送手机验证码
if (username.length() > 11 || isDigit == false) {
return new RequestResult(ResultCodeUtil._201, ResultCodeUtil.getMsg(ResultCodeUtil._201));
}
if (check.equals(imgVerificationCode)) {
RedisCache.delCache(username);
SmsSendResponse smsSendResponse = SmsSend.sendVerificationCodeMessage(username);
String verificationCode = smsSendResponse.getVerificationCode();
Map<String, String> result = new HashMap<String, String>();
try {
RedisCache.putCacheWithExpireTime(username, verificationCode, (long) 360);
result.put("username", username);
result.put("verificationCode", verificationCode);// 到时候删除,只测试用
} catch (Exception e) {
e.printStackTrace();
}
return new RequestResult(ResultCodeUtil._100, ResultCodeUtil.getMsg(ResultCodeUtil._100), result);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return new RequestResult(ResultCodeUtil._110, ResultCodeUtil.getMsg(ResultCodeUtil._110));
}


/**
* 登陆

* @param json
* @return
*/
@RequestMapping(value = "/login", method = RequestMethod.POST)
@ResponseBody
public Object Login(@RequestBody JSONObject json) {
userService.login(json);
String userName = json.getString("username");
String passwd = json.getString("password");
Subject subject = SecurityUtils.getSubject();
passwd = MD5Util.MD5(MD5Util.MD5(passwd));
UsernamePasswordToken uptoken = new UsernamePasswordToken(userName, passwd);
try {
subject.login(uptoken);
return userService.login(json);
} catch (UnknownAccountException e) {
e.printStackTrace();
return new RequestResult(ResultCodeUtil._108, ResultCodeUtil.getMsg("108"));
} catch (IncorrectCredentialsException e) {
e.printStackTrace();
return new RequestResult(ResultCodeUtil._101, ResultCodeUtil.getMsg("101"));
}
}


/** 
* 获取图片验证码

* @param json
* @return
*/
@RequestMapping(value = "/getImgVerificationCode")
@ResponseBody
public void adminGetImgVerificationCode(@RequestBody JSONObject json) {
String capchaId = json.getString("capchaId");
String verifyCode = VerifyCodeUtils.generateVerifyCode(4);
int w = 80, h = 28;
try {
VerifyCodeUtils.outputImage(w, h, response.getOutputStream(), verifyCode);
} catch (IOException e) {
e.printStackTrace();
// return new RequestResult(ResultCodeUtil._ysy,
// ResultCodeUtil.getMsg(ResultCodeUtil._ysy));
}
try {
RedisCache.putCacheWithExpireTime(capchaId, verifyCode, (long) 300);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// return new RequestResult(ResultCodeUtil._100,
// ResultCodeUtil.getMsg(ResultCodeUtil._100));
}


}


可以在代码中选择自己想要的部分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值