jdbc.properties

  1. JDBC_DRIVER=org.mariadb.jdbc.Driver
  2. JDBC_URL=jdbc:mariadb://127.0.0.1:3306/market
  3. JDBC_USERNAME=root
  4. JDBC_PASSWORD=root

sso.properties

  1. #标记session的token名称
  2. REDIS_USER_SESSION_KEY=GSESSION
  3. #session超时时间
  4. TOKEN_TIME_OUT=1800

mybatis-pageHelper.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <!-- 配置分页插件 -->
  7. <plugins>
  8. <plugin interceptor="com.github.pagehelper.PageHelper">
  9. <!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
  10. <property name="dialect" value="mariadb"/>
  11. </plugin>
  12. </plugins>
  13. </configuration>

spring-mybatis.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
  4. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  7. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
  8. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
  9. http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
  10. <!-- 解析properties文件的工具类 -->
  11. <context:property-placeholder location="classpath:*.properties"/>
  12.  
  13. <!-- 开启service层的注解扫描 -->
  14. <context:component-scan base-package="io.guangsoft.market.service"/>
  15.  
  16. <!-- 配置数据源 -->
  17. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
  18. <property name="driverClassName" value="${JDBC_DRIVER}" />
  19. <property name="url" value="${JDBC_URL}" />
  20. <property name="username" value="${JDBC_USERNAME}" />
  21. <property name="password" value="${JDBC_PASSWORD}" />
  22. <property name="maxActive" value="10" />
  23. <property name="minIdle" value="5" />
  24. </bean>
  25.  
  26. <!-- sqlSessionfactory -->
  27. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  28. <property name="configLocation" value="classpath:mybatis-pagehelper.xml"/>
  29. <property name="dataSource" ref="dataSource"/>
  30. </bean>
  31.  
  32. <!-- 扫描代理类 -->
  33. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  34. <property name="basePackage" value="io.guangsoft.market.dao"/>
  35. </bean>
  36.  
  37. <!-- 配置事物管理器的切面 -->
  38. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  39. <property name="dataSource" ref="dataSource"/>
  40. </bean>
  41.  
  42. <!-- 通知 -->
  43. <tx:advice id="Advice" transaction-manager="transactionManager">
  44. <!-- 事物传播行为 -->
  45. <tx:attributes>
  46. <!-- 传播行为 -->
  47. <tx:method name="save*" propagation="REQUIRED" />
  48. <tx:method name="insert*" propagation="REQUIRED" />
  49. <tx:method name="add*" propagation="REQUIRED" />
  50. <tx:method name="create*" propagation="REQUIRED" />
  51. <tx:method name="delete*" propagation="REQUIRED" />
  52. <tx:method name="bat*" propagation="REQUIRED" />
  53. <tx:method name="update*" propagation="REQUIRED" />
  54. <tx:method name="drop*" propagation="REQUIRED" />
  55. <tx:method name="modify*" propagation="REQUIRED" />
  56. <tx:method name="find*" propagation="SUPPORTS" read-only="true" />
  57. <tx:method name="select*" propagation="SUPPORTS" read-only="true" />
  58. <tx:method name="get*" propagation="SUPPORTS" read-only="true" />
  59. </tx:attributes>
  60. </tx:advice>
  61. <aop:config>
  62. <aop:advisor advice-ref="Advice" pointcut="execution(* io.guangsoft.market.service.*.*(..))" />
  63. </aop:config>
  64. </beans>

UserService.jsva

  1. package io.guangsoft.market.service;
  2.  
  3. import io.guangsoft.market.util.bean.GResult;
  4. import io.guangsoft.market.dao.bean.TbUser;
  5.  
  6. public interface UserService {
  7. public GResult userParamCheck(String param, int type);
  8.  
  9. public GResult userRegister(TbUser user);
  10.  
  11. public GResult userLogin(String username, String password);
  12.  
  13. public GResult findUserByToken(String token);
  14. }

UserServiceImpl.java

  1. package io.guangsoft.market.service;
  2.  
  3. import io.guangsoft.market.util.bean.GResult;
  4. import io.guangsoft.market.dao.bean.TbUser;
  5. import io.guangsoft.market.dao.bean.TbUserExample;
  6. import io.guangsoft.market.dao.jedis.JedisDao;
  7. import io.guangsoft.market.util.utils.JsonUtil;
  8. import io.guangsoft.market.dao.mapper.TbUserMapper;
  9. import io.guangsoft.market.util.utils.GResultUtil;
  10. import org.apache.commons.lang3.StringUtils;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.beans.factory.annotation.Value;
  13. import org.springframework.stereotype.Service;
  14. import org.springframework.util.DigestUtils;
  15.  
  16. import java.util.Date;
  17. import java.util.List;
  18. import java.util.UUID;
  19.  
  20. @Service
  21. public class UserServiceImpl implements UserService {
  22.  
  23. @Autowired
  24. private TbUserMapper userMapper;
  25.  
  26. @Autowired
  27. private JedisDao jedisDao;
  28.  
  29. @Value("${REDIS_USER_SESSION_KEY}")
  30. private String REDIS_USER_SESSION_KEY;
  31.  
  32. @Value("${TOKEN_TIME_OUT}")
  33. private int TOKEN_TIME_OUT;
  34.  
  35. /**
  36. * 用户注册时数据校验
  37. */
  38. @Override
  39. public GResult userParamCheck(String param, int type) {
  40. TbUserExample example = new TbUserExample();
  41. TbUserExample.Criteria c = example.createCriteria();
  42. //条件的指定
  43. if (type == 1) { //用户名
  44. c.andUsernameEqualTo(param);
  45. } else if (type == 2) { //判断手机号是否存在
  46. c.andPhoneEqualTo(param);
  47. } else { //判断邮箱是否可用
  48. c.andEmailEqualTo(param);
  49. }
  50. List<TbUser> list = this.userMapper.selectByExample(example);
  51. if (list == null || list.size() <= 0) {
  52. // 返回数据,true:数据可用,false:数据不可用
  53. return GResultUtil.success();
  54. }
  55. return GResultUtil.fail();
  56. }
  57.  
  58. /**
  59. * 用户注册
  60. */
  61. @Override
  62. public GResult userRegister(TbUser user) {
  63. //1.数据补齐
  64. user.setCreated(new Date());
  65. user.setUpdated(new Date());
  66. //2.将密码做加密处理 我们可以使用DigestUtils spring提供的一个工具类 来做md5的加密处理
  67. user.setPassword(DigestUtils.md5DigestAsHex(user.getPassword().getBytes()));
  68. this.userMapper.insert(user);
  69. return GResultUtil.success();
  70. }
  71.  
  72. /**
  73. * 用户登陆
  74. */
  75. @Override
  76. public GResult userLogin(String username, String password) {
  77. TbUserExample example = new TbUserExample();
  78. TbUserExample.Criteria c = example.createCriteria();
  79. c.andUsernameEqualTo(username);
  80. //执行查询
  81. List<TbUser> list = this.userMapper.selectByExample(example);
  82. //判断用户名
  83. if (list == null || list.size() <= 0) {
  84. return GResultUtil.fail(-1, "用户名或密码有误!");
  85. }
  86. //判断密码
  87. TbUser user = list.get(0);
  88. if (!user.getPassword().equals(DigestUtils.md5DigestAsHex(password.getBytes()))) {
  89. return GResultUtil.fail(-1, "用户名或密码有误!");
  90. }
  91. //用户名与密码都OK
  92. //生成token 这个token就是我们来源传统登录中的sessionID
  93. String uuid = UUID.randomUUID().toString();
  94. //将生成的token作为key与user对象转换完的json格式字符串写入到redis中
  95. //需要将user的密码置空
  96. user.setPassword(null);
  97. String userJson = JsonUtil.objectToJson(user);
  98. String token = this.REDIS_USER_SESSION_KEY + ":" + uuid;
  99. this.jedisDao.set(this.REDIS_USER_SESSION_KEY + ":" + token, userJson);
  100. this.jedisDao.expire(this.REDIS_USER_SESSION_KEY + ":" + token, this.TOKEN_TIME_OUT);
  101. return GResultUtil.build(0, "用户正确!", token);
  102. }
  103.  
  104. /**
  105. * 根据token查询用户
  106. */
  107. @Override
  108. public GResult findUserByToken(String uuid) {
  109. String str = this.jedisDao.get(this.REDIS_USER_SESSION_KEY+":"+uuid);
  110. //判断token是否失效
  111. if(StringUtils.isBlank(str)){
  112. return GResultUtil.fail(-1, "token已失效!");
  113. }
  114. //如果用户的token没有失效,需要重置失效时间
  115. this.jedisDao.expire(this.REDIS_USER_SESSION_KEY+":"+uuid, this.TOKEN_TIME_OUT);
  116. TbUser user = JsonUtil.jsonToPojo(str, TbUser.class);
  117. return GResultUtil.build(0, "查询成功!", user);
  118. }
  119. }

基于SSM的单点登陆04的更多相关文章

  1. 基于SSM的单点登陆01

    使用SSM的Maven聚合项目 建立父项目market的pom文件 <?xml version="1.0" encoding="UTF-8"?> & ...

  2. 基于SSM的单点登陆05

    springmvc.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...

  3. 基于SSM的单点登陆03

    TbUser.java和TbUserExample.java,TbUserMapper.java,TbUserMapper.xml由mybatis框架生成. generatorConfig.xml & ...

  4. 基于SSM的单点登陆02

    pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http: ...

  5. Spring Security 解析(六) —— 基于JWT的单点登陆(SSO)开发及原理解析

    Spring Security 解析(六) -- 基于JWT的单点登陆(SSO)开发及原理解析   在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把 ...

  6. 集成基于OAuth协议的单点登陆

    在之前的一篇文章中,我们已经介绍了如何为一个应用添加对CAS协议的支持,进而使得我们的应用可以与所有基于CAS协议的单点登陆服务通讯.但是现在的单点登陆服务实际上并不全是通过实现CAS协议来完成的.例 ...

  7. 集成基于CAS协议的单点登陆

    相信大家对单点登陆(SSO,Single Sign On)这个名词并不感到陌生吧?简单地说,单点登陆允许多个应用使用同一个登陆服务.一旦一个用户登陆了一个支持单点登陆的应用,那么在进入其它使用同一单点 ...

  8. 基于SAML的单点登录介绍

    http://blog.csdn.net/csethcrm/article/details/20694993 一.背景知识: SAML即安全断言标记语言,英文全称是Security Assertion ...

  9. (转)基于SAML的单点登录介绍

    转:http://www.cnblogs.com/zsuxiong/archive/2011/11/19/2255497.html 一.背景知识: SAML即安全断言标记语言,英文全称是Securit ...

随机推荐

  1. ios 怎样将不支持ARC的文件设为支持ARC的--JSON

    怎样将不支持ARC的文件设为支持ARC的 双击须要改动的文件加上一句话就可以 -fno-objc-arc

  2. 根本上解决npm install 报错“ajv-keywords@3.4.0 requires a peer of ajv@^6.9.1 but none is installed. You must install peer dependencies yourself.“

    每次项目npm install 的时候都报这个错误, 然后网上找的方法就把这个 ajv重新安装下,感觉有点麻烦, 后来有次我把npm更新了一下(我的版本是: 6.1.0),更新到了最新版本,这个问题就 ...

  3. java&javaweb学习笔记

    http://blog.csdn.net/h3243212/article/details/50659471

  4. python bottle学习(四)request.quest/query_string/params/body等方法介绍

      假设url:http://0.0.0.0:18082/api/cluster/group?wzd=111&abc=cc 方法类型:POST,body是{"name":& ...

  5. 57、Design Support Library 介绍及环境搭建

    一.Material Design几个要素 扁平化.简洁: 水波反馈: 良好体验的过渡动画: 材料空间位置的直观变化: 二.Android Studio配置 在 build.gradle 文件中加入, ...

  6. nginx tomcat https配置方案

    nginx目录下配置: ssl目录下 添加 证书和密码,如图 /etc/nginx/conf.d  下修改配置文件 HTTP域名的配置: ## Basic reverse proxy server # ...

  7. jQuery-实现图片的放大镜显示效果

    jQuery-实现图片的放大镜显示效果 by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.com/word ...

  8. 【Lombok】了解

    项目中使用了 Lombok ,对象无需写get set 等方法,一个注释便可以搞定.IDEA中项目报错,下载对应插件(Lombok Plugin)就好了.很神奇,就了解一下: 官网: Project ...

  9. 三种系统监控工具对比:top vs Htop vs Glances

    首先启用 EPEL Repository: yum -y install epel-release 启用 EPEL Repository 後, 可以用 yum 直接安裝 Htop: yum -y in ...

  10. 9.Query on Embedded/Nested Documents-官方文档摘录

    1.插入案例 db.inventory.insertMany( [ { item: "journal", qty: 25, size: { h: 14, w: 21, uom: & ...