1.基于SSM框架的Maven搭建
2.搭建业务流程实现如下

(1)创建用户User
public class User {private int id;private String client_id;//登录状态(登陆,未登录)private String status;//用户名private String username;//密码private String password;//最后一次登录时间private Timestamp last_login;
(2)持久层接口
@Repository
public interface UserDao {//登陆public User Login(String username,String password);//根据ID查找用户public User findById(int id);// 修改密码public int updatePass(User user);
}
(3)持久层实现User.xml
<mapper namespace="com.sso.dao.UserDao"><sql id="UserColumns">c.id,c.client_id,c.status,c.username,c.password,c.last_login</sql><!-- 根据id查找 --><select id="findById" resultType="com.sso.entity.User">SELECT <include refid="UserColumns" />FROM dim_user cWHERE c.id = #{0}</select><!-- 修改密码 --><update id="updatePass">UPDATE dim_user  SET<if test="password !='' and password != null ">password = #{password} </if>where id = #{id}</update><!-- 登陆 --><select id="Login" resultType="com.sso.entity.User">select * from dim_user c where c.username = #{0} and c.password = #{1} </select>
</mapper>
(4)业务层接口
public interface UserService {//登陆public User Login(String username,String password);//根据ID查找用户public User findById(int id);// 修改密码public int updatePass(User user);
}
(5)业务层实现类
@Service
public class UserServiceImpl implements UserService {@Resourceprivate UserDao dao;@Overridepublic User Login(String username, String password) {return dao.Login(username, password);}@Overridepublic int updatePass(User user) {return dao.updatePass(user);}@Overridepublic User findById(int id) {return dao.findById(id);}}
(6)控制层
@Controller
@RequestMapping("/user")
public class UserController {@Resource
private UserService service;//登陆@RequestMapping(value="/login",produces = "text/html;charset=UTF-8")public String login(Model model,String uName,String uPassword,HttpSession session ){String password = GetMD5.getMD5(uPassword);User user = service.Login(uName, password);if(user != null) {/***是将user保存在session中*session 的key值为“user”,value 值就是user真实的值,或者引用值*/session.setAttribute("user", user);return "jsp/choosemk.jsp";}return "redirect:/index.jsp";}// 修改密码@RequestMapping("/updatePass")public String updatePass(HttpServletRequest request,HttpSession session,Model model){//原始密码String oldPassword = GetMD5.getMD5(request.getParameter("old"));//新密码String newPassword1 = request.getParameter("new1");//再次确认新密码String newPassword2 = request.getParameter("new2");//通过session.getAttribute(“user”) 的方法获得这个对象User user = (User) session.getAttribute("user");String yuanPassword = user.getPassword();if(oldPassword.equals(yuanPassword)){if(newPassword1.equals(newPassword2)){user.setPassword(GetMD5.getMD5(newPassword2));service.updatePass(user);String success = "密码修改成功";model.addAttribute("success", success);return "jsp/platform.jsp";}else{String notSame = "两次输入的密码不一样";model.addAttribute("notSame", notSame);return "jsp/platform.jsp";}}String yError = "原密码错误";model.addAttribute("yError", yError);return "jsp/platform.jsp";}//注销@RequestMapping("/outLogin")public String remove(HttpServletRequest request) {request.getSession().invalidate();return "redirect:/index.jsp";}}

3.登录认证的拦截器实现

(1)登录认证的拦截器
//登录认证的拦截器
public class LoginInterceptor implements HandlerInterceptor{//执行Handler方法之前执行//用于身份认证、身份授权//比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行//该方法将在Controller处理之前进行调用@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception {/*** 从当前request中获取session,如果获取不到session,则会自动创建一个session,并返回新创建的 * session;如果获取到,则返回获取到的session;   */HttpSession session=request.getSession();//从session中取出用户份信息User user = (User) session.getAttribute("user");if(user != null){//身份存在,放行return true;} else {//执行这里表示用户身份需要验证,跳转到登录界面request.getRequestDispatcher("../index.jsp").forward(request, response);///WEB-INF/jsp///return false表示拦截,不向下执行//return true表示放行       return false;}}//进入Handler方法之后,返回modelAndView之前执行//应用场景从modelAndView出发:将公用的模型数据在这里//传到视图,也可以在这里统一指定视图@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response,Object handler, ModelAndView modelAndView) throws Exception {System.out.println("HandlerInterceptor1......postHandle");}//执行Handler完成执行此方法//应用场景:统一异常处理,统一日志处理@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response,Object handler, Exception ex)throws Exception {System.out.println("HandlerInterceptor1......afterHandle");}}
(2)在springmvc.xml配置拦截器
<!-- 拦截器配置,拦截顺序:先执行后定义的,排在第一位的最后执行。--><mvc:interceptors><!-- 多个拦截器,顺序执行 --><mvc:interceptor><!-- /**表示所有url包括子url路径 --><mvc:mapping path="/chooseData/**"/><mvc:mapping path="/user/**"/><mvc:mapping path="/home/**"/><mvc:exclude-mapping path="/user/login" /><mvc:exclude-mapping path="/chooseData/sensorShow" /><bean class="com.quelingfei.settings.Interceptor.LoginInterceptor"/></mvc:interceptor>
</mvc:interceptors>

5.用户名密码加密处理MD5

public class GetMD5 {public static String getMD5(String message) {String md5 = "";try {MessageDigest md = MessageDigest.getInstance("MD5");  // 创建一个md5算法对象byte[] messageByte = message.getBytes("UTF-8");byte[] md5Byte = md.digest(messageByte);              // 获得MD5字节数组,16*8=128位md5 = bytesToHex(md5Byte);                            // 转换为16进制字符串} catch (Exception e) {e.printStackTrace(); }return md5;}// 二进制转十六进制public static String bytesToHex(byte[] bytes) {StringBuffer hexStr = new StringBuffer();int num;for (int i = 0; i < bytes.length; i++) {num = bytes[i];if(num < 0) {num += 256;}if(num < 16){hexStr.append("0");}hexStr.append(Integer.toHexString(num));}return hexStr.toString().toUpperCase();}//主函数测试public static void main(String[] args) {System.out.println(getMD5("root"));}}

Java技术--单点登录统一认证系统的实现相关推荐

  1. 华为外部Portal认证 Radius认证计费 实现基于Mac快速认证的Mac无感知认证和结合CAS单点登录统一认证平台和AD域LDAP对接配置

    华为外部Portal认证 Radius认证计费 实现基于Mac快速认证的Mac无感知认证 结合CAS单点登录统一认证平台 AD域LDAP对接配置 实现用户名密码实名认证 访客短信认证 二维码扫码 钉钉 ...

  2. IdentityServer4实现单点登录统一认证

    什么是单点登录统一认证:假如某公司旗下有10个网站(比如各种管理网站:人事系统啊,财务系统啊,业绩系统啊等),我是该公司一管理员或者用户,按照传统网站模式是这样:我打开A网站 输入账号密码 然后进入到 ...

  3. java单点登录统一认证,JEECG 集成KiSSO单点登录实现统一身份认证

    JEECG 集成KiSSO单点登录实现统一身份认证 JEECG 如何为其他第三方系统实现统一身份认证服务,实现单点登录? 第三方系统如何对接呢? 今天为大家揭开这层面纱,让大家了解实质,使用它更快速的 ...

  4. [原创]django+ldap+memcache实现单点登录+统一认证

    前言 由于公司内部的系统越来越多,为了方便用户使用,通过django进行了单点登录和统一认证的尝试,目前实现了django项目的单点登录和非django项目的统一认证,中间波折挺多,涉及的技术包括dj ...

  5. 【统一登录认证】企业微信统一认证系统流程整理 流程图 时序图

    [统一登录认证]企业微信统一认证系统流程整理 流程图 / 时序图

  6. Java 实现单点登录功能

    J2EE社区 苟有恒,何必三更起五更眠; 最无益,只怕一日曝十日寒. posts - 238, comments - 317, trackbacks - 0, articles - 16 导航 首页 ...

  7. Spring+ Spring cloud + SSO单点登录应用认证

    之前的文章中有介绍spring cloud sso集成的方案,也做过spring + jwt + redis的解决方案,不同系统的无缝隙集成,统一的sso单点登录界面的管理.每个应用集成的权限认证,白 ...

  8. 企业微信 自建服务器,企业微信单点登录自建系统过程记录

    项目上接到一个需求,为方便员工登录各种内部系统,统一以企业微信为入口,在企业微信面板中增加系统跳转链接实现单点登录. 整体思路比较简单,大致如下: 1.由于自建系统和企业微信的用户ID不同,所以需要建 ...

  9. java UCnter 单点登录 对接。

    java UCnter 单点登录 对接. 前提 PHP项目要部署成功.论坛能正常访问. 先配置 应用 1.是论坛应用 4.是java服务器,也就是你java登录的项目. 必须通信成功. .主应用IP就 ...

  10. SSM毕设项目基于Java技术的医院在线挂号系统s73ib(java+VUE+Mybatis+Maven+Mysql)

    SSM毕设项目基于Java技术的医院在线挂号系统s73ib(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + ...

最新文章

  1. 死鱼——--摘自《项目百态:深入理解软件项目行为模式 》
  2. 开源项目|基于darknet实现量化感知训练,已实现yolov3-tiny所有算子
  3. 以太坊 node data write error_Node之 创建服务器与客户端
  4. 训练和测试数据的观察
  5. Python3常见内嵌函数
  6. 11-Mybatis 延迟加载策略
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的仿百度网盘系统
  8. 移动互联网的特性 互联网+
  9. zabbix提示错误:zabbix server is not running: the information displayed may not be current
  10. 【matlab】膨胀
  11. 使用servlet原生API作为参数
  12. 微信扫码访问网站调用默认浏览器打开如何实现?
  13. java zk_zk框架:zul文件,纯Java或混合更好的性能
  14. java解析本地wsdl_关于解析本地wsdl文件
  15. Win10不能访问共享硬盘怎么办
  16. ●「.|貓」erPhotoshop滤镜巧制超级美女插画效果
  17. Layui 重载后表格内容重复 更换提交方式已解决
  18. 腾讯-腾讯云citybase产品白皮书
  19. 博弈论读书笔记(三):负和、零和、正和博弈
  20. 推荐 7 个牛哄哄的电商项目

热门文章

  1. 联想ghost重装系统_史上最全的重装ghost系统错误解决方法大全
  2. PCB生产文件的导出 导出给厂家保证自己文件安全
  3. 531 孤独像素 I
  4. kinect_v2-ros(iai_kinect2)安装,环境ubuntu1604+INTEL+NVIDIA
  5. 用友NC系统与一卡通集成解决方案
  6. tensorflowpython32_Python tensorflow.python.framework.dtypes 模块,float32() 实例源码 - 编程字典...
  7. 服务器维护封号,LOL客服的关于他们自己服务器问题导致账号被封号的问题
  8. 如何修改静态 IP 地址和动态 IP 地址
  9. 2021年西式面点师(中级)考试题库及西式面点师(中级)考试试题
  10. 使用fpdf2将txt文本转可编辑pdf报错解决办法