用户注册登录退出功能的实现——淘淘商城(二十五)

    • 静态资源配置
    • 用户注册页面
      • 需求
        • 分析
        • 总结
      • Controller层
    • 用户登录页面
      • 需求
        • 分析
        • 总结
      • Controller层
    • 门户工程整合单点登录系统
      • cookie的读写
        • 需求
        • 开发
      • 注册、登录、退出页面的跳转
        • 需求
        • 开发
      • 拦截器强制登录
        • 需求
        • Service层
        • 拦截器
    • 运行工程

静态资源配置

  • taotao-sso的WEB-INF下添加静态资源。
    11.ssostatic.png
  • springmvc-config.xml中配置静态资源映射。
  <!--静态资源映射--><mvc:resources mapping="/css/**" location="/WEB-INF/css/"/><mvc:resources mapping="/js/**" location="/WEB-INF/js/"/><mvc:resources mapping="/images/**" location="/WEB-INF/images/"/>

用户注册页面

需求

分析

  • 在register.jsp页面,对注册进行处理,包括对数据进行有效性校验和检查用户名、手机号是否可用。
    11.registerdiv.png
    11.registerreg.png
    11.regcheck.png
    11.regbeforesubmit.png
  • 如果通过校验和并且用户名和手机号可用,执行注册,返回注册是否成功。
    11.regdosubmit.png

总结

  • 在taotao-sso中开发,由于注册相关接口已经在sso工程中实现,只需开发controller控制跳转到注册页面。
  • 请求url:/page/register
  • 响应:register视图

Controller层

  • controller包下创建PageController,返回注册视图。
@Controller
@RequestMapping("/page")
public class PageController {@RequestMapping("/register")public String showRegister() {return "register";}}

用户登录页面

需求

分析

  • 在login.jsp页面,校验登录信息的输入之后,执行登录。
    11.loginid.png
    11.longin.png
    11.dolongin.png
  • 登录成功之后,如果回调参数,跳转到回调url,否则跳转到商城首页。

总结

  • 在taotao-sso中开发,由于注册相关接口已经在sso工程中实现,只需开发controller控制跳转到登录页面。
  • 请求url:/page/login
  • 请求参数:redirect,回调url。
  • 响应:login视图,包含回调url。

Controller层

  • PageController中开发接口,跳转到登录页面。
    @RequestMapping("/login")public String showLogin(String redirect, Model model) {model.addAttribute("redirect", redirect);return "login";}

门户工程整合单点登录系统

cookie的读写

需求

  • 在taotao-sso中开发。
  • 登录过程需要向cookie中写入用户信息,用以表示身份。
  • 在登录首页时,需要查询cookie,以判断用户是否登录,从而显示不同的欢迎页面。页面中已实现。
    11.footerstart.png
    11.taotaojs.png
    11.checklogin.png
  • 用户退出时,需要将用户的cookie删除。

开发

  • UserServiceImpl登录方法中添加写cookie的逻辑。
    • 需要在方法中添加HttpServletRequest,HttpServletResponse参数。
        //添加写cookie的逻辑,默认有效期为浏览器关闭CookieUtils.setCookie(request, response, TT_TOKEN, token);
  • UserServiceImpl退出方法中添加删除cookie的逻辑。
    • 需要在方法中添加HttpServletRequest,HttpServletResponse参数。
        //删除cookieCookieUtils.deleteCookie(request, response, TT_TOKEN);
  • 在UserController登录和退出接口中添加添加HttpServletRequest,HttpServletResponse参数。

注册、登录、退出页面的跳转

需求

  • 在portal中首页登录、注册需要调用对应的js,从而转到对应的页面。
    11.shortcut.png
    11.shortcutjs.png
    11.inout.png
  • 退出按钮则在登录之后才会显示。
    11.out.png

开发

  • 需要在sso的UserController中添加对这三个功能跳转的控制。
    @RequestMapping("/showLogin")public String showLogin() {return "redirect:/page/login";}@RequestMapping("/showRegister")public String showRegister() {return "redirect:/page/register";}@RequestMapping("/showLogout/{token}")public String showLogout(@PathVariable String token, String callback) {String url = "/user/logout/" + token + (callback == null ? "" : "?callback=" + callback);LOGGER.debug("logout url: {}", url);return "redirect:" + url;}

拦截器强制登录

需求

  • 由于在业务中添加验证是否登录的操作比较麻烦,特别是多个业务地点需要同一个操作的时候。可以使用springmvc的拦截器实现登录的验证,强制访问某些页面之前必须登录。
  • 拦截器使用了 AOP 思想,拦截器介绍。

Service层

  • 在taotao-portal中创建sso.properties,配置sso的信息。
#sso系统登录url
SSO_BASE_URL=http://localhost:8084
#获取用户token的url
SSO_USER_TOKEN=/user/token/
#登录页面Url
SSO_PAGE_LOGIN=/page/login
  • 在taotao-portal中创建UserService,根据token,调用sso系统的服务,返回用户信息。以此判断用户是否登录。
@Service
public class UserServiceImpl implements UserService {private static final Logger LOGGER = LoggerFactory.getLogger(UserServiceImpl.class);@Value("${SSO_BASE_URL}")private String SSO_BASE_URL;@Value("${SSO_USER_TOKEN}")private String SSO_USER_TOKEN;@Overridepublic TbUser getUser(String token) {try {String json = HttpClientUtil.doGet(SSO_BASE_URL + SSO_USER_TOKEN + token);if (!StringUtils.isBlank(json)) {TaotaoResult result = TaotaoResult.formatToPojo(json, TbUser.class);if (result.getStatus() == 200) {TbUser user = (TbUser) result.getData();return user;}}LOGGER.debug("get json from sso: {}", json);} catch (Exception e) {e.printStackTrace();}return null;}
}

拦截器

  • 在intercepter包下实现拦截器,在跳转到指定url之前,对用户是否登录做校验。如果登录则继续访问,否则跳转到登录页面。
public class LoginInterceptor implements HandlerInterceptor {private static final Logger LOGGER = LoggerFactory.getLogger(LoginInterceptor.class);@Autowiredprivate UserService userService;@Value("${TT_TOKEN}")private String TT_TOKEN;@Value("${SSO_BASE_URL}")private String SSO_BASE_URL;@Value("${SSO_PAGE_LOGIN}")private String SSO_PAGE_LOGIN;/*** @return 是否放行*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o)throws Exception {//从cookie中取token,根据token取得用户信息String token = CookieUtils.getCookieValue(request, "TT_TOKEN");TbUser user = userService.getUser(token);//取不到用户信息if (user == null) {//跳转到登录页面,把用户请求的url作为参数传递给登录页面。String redirectUrl = SSO_BASE_URL + SSO_PAGE_LOGIN+ "?redirect=" + request.getRequestURL();LOGGER.debug("redirect: {}", redirectUrl);response.sendRedirect(redirectUrl);return false;}return true;}@Overridepublic void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o,ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,Object o, Exception e) throws Exception {}
}
  • 在springmvc-config.xml中配置拦截器,暂定访问商品详情页需要登录。
    • 注意,需要加载properties里的配置,因为LoginInterceptor属于springmvc容器,相对于spring来说是子容器,无法使用@Value访问spring加载的全局资源。
    • 详细分析。
 <!-- 加载配置文件 --><context:property-placeholder location="classpath:resource/*.properties"/><!-- 拦截器配置 --><mvc:interceptors><mvc:interceptor><!-- 拦截订单类请求 --><mvc:mapping path="/item/**"/><bean class="com.taotao.portal.interceptor.LoginInterceptor"/></mvc:interceptor></mvc:interceptors>

运行工程

  • 运行rest,sso,protal,search,redis。
  • 未登录时首页为显示登录按钮。
    11.afterlogout.png
  • 点击商品详情页,拦截器拦截强制跳转到登录界面。
    11.httpredirect.png
  • 登录之后显示欢迎。
    11.afterlogin.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/22974.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA实验:完成一个电商购物平台的登录注册窗体,点击“点我注册”,显示注册窗体,用户输入用户信息,点击提交后到达显示用户信息的窗体。

内容3&#xff1a;在内容2的基础上&#xff0c;用户点击登录注册窗体的登录按钮&#xff0c;到达商品信息查询的窗体&#xff0c;窗体如图3所示。 本次实验主要利用java类swing中的各种方法。 实验思路&#xff1a;通过实验所给出的窗口&#xff0c;使用swing中方法进行构建&a…

【Go实战 | 电商平台】(4) 用户注册

文章目录 1. 编写路由2. 注册路由3. 注册接口3.1 service层3.2 api层3.2 serializer 4. 注册服务 用到的包 github.com/gin-contrib/sessions github.com/gin-contrib/sessions/cookie github.com/gin-gonic/gin 1. 编写路由 新建一个WSGI应用程序实例。 r : gin.Default(…

Vue电商项目--登录与注册

登录注册静态组件 刚刚报了一个错误&#xff0c;找不到图片的资源 assets文件夹--放置全部组件共用静态资源 在样式当中也可以使用符号【src别名】。切记在前面加上 注册业务上 先修改原先的接口成这个按钮 然后把input框里面的数据保存到data中 注册业务下 就是点击获…

C++面经

编译、链接与库编译单文件编译多文件编译 动态链接与静态链接静态链接动态链接 面向对象c⾯向对象 三大特性封装继承多态静态多态&#xff08;模板或重载&#xff09;动态多态&#xff08;面向对象、继承、多态、虚函数&#xff09; 面向对象和面向过程语言的区别面向过程面向对…

GPT-4,究竟强大在哪里?

2023年3月15日&#xff0c;OpenAI向全世界进行了GPT-4的发布会&#xff0c;整个世界都为之沸腾了。GPT-4究竟是有多厉害&#xff1f;为什么能造成这么大的影响&#xff1f;今天小灰来仔细讲解一下。 基础配置 先说说基础配置&#xff0c;之前小灰分享过&#xff0c;GPT-3.5有17…

【EasyPoi实战系列】Spring Boot集成EasyPoi - 第467篇

历史文章&#xff08;文章累计460&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 6…

解密Prompt系列1. Tunning-Free Prompt:GPT2 GPT3 LAMA AutoPrompt

借着ChatGPT的东风&#xff0c;我们来梳理下prompt范式的相关模型。本系列会以A Systematic Survey of Prompting Methods in Natural Language Processing这篇综述为基础&#xff0c;分门别类的整理下这几年比较有代表性的prompt模型。或许你还以其他形式看到过prompt概念&…

未来式人工智能教育在国内的现状

无论是高空户外还是深海水下&#xff0c;或者火灾、地震现场&#xff0c;危险环境让身处其中的工作人员面临巨大威胁。而正在兴起的特种机器人&#xff0c;有望代替人类&#xff0c;在危险现场完成任务。格物斯坦表示&#xff1a;特种机器人&#xff0c;是机器人的一个重要分支…

chatgpt赋能python:Python如何隐藏进程

Python如何隐藏进程 介绍 进程是指运行中的程序在操作系统中的一个实例。在计算机系统中&#xff0c;进程通常都可以被用户或者其他程序所看到。然而&#xff0c;有时候我们需要隐藏进程&#xff0c;比如保护敏感信息或者防止恶意攻击。 Python是一种高级编程语言&#xff0…

UP主高薪裸辞转型独立开发者;LLM权威学习路线图;游戏开发最全AI工具盘点;LOGO制作保姆教程 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; Hugging Face 全球开源AI游戏开发挑战赛&#xff0c;7月8日开始 Open Source AI Game Jam 是 Hugging Face 举办的首场开源游戏开发挑…

ChatGPT到底是什么,带领大家详细解读!

前言 ChatGPT的强大程度相信很多同学都已经体验过了&#xff0c;无论是编写文章&#xff0c;问答&#xff0c;写代码展现除了非常惊艳的能力。一定喜欢技术的同学一定好奇&#xff0c;ChatGPT是如何做到“全知全能”&#xff0c;即会写文章&#xff0c;又会表达总结&#xff0…

IDE + ChatGPT,这款编辑器真的做到可以自动写代码了!

介绍 Cursor 是集成了 GPT-4 的 IDE 工具&#xff0c;目前免费并且无需 API Key&#xff0c;支持 Win、Mac、Linux 平台&#xff0c;可以按要求生成代码&#xff0c;或者让 AI 帮助优化代码&#xff0c;分析代码。Cursor目前已经集成了openai的GPT-4&#xff0c;它或将彻底改变…

CSDN周赛第30期题目解析(天然气定单、小艺读书、买苹果、圆桌)

CSDN周赛第30期&#xff0c;我应试成绩“0”分。试着对天然气定单、小艺读书、买苹果&#x1f34e;、圆桌四个题目&#xff0c;完成算法解析。 (本文获得CSDN质量评分【91】) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖…

猿人学逆向比赛第四题-gRPC题解 | Go版本

大家好&#xff0c;我是TheWeiJun&#xff0c;欢迎来到我的公众号。在现代互联网中&#xff0c;某些网站、App会使用gRPC进行数据传输&#xff0c;以加强数据的安全性和保密性。然而&#xff0c;逆向加密算法并不是一件简单的事情。本文将探讨如何逆向猿人学App的gRPC协议&…

ChatGPT 扩展来自动化你的生活

除非您一直生活在岩石下&#xff0c;否则您可能知道 ChatGPT 如何改变业务以及我们的工作和沟通方式。您只需访OpenAI 的网站即可解锁 ChatGPT 的强大功能。 但是&#xff0c;如果我们不仅可以在其官方网站上使用 ChatGPT&#xff0c;还可以在 微信、Excel、Word 以及更多地方使…

chatGPT的到来,是否意味新时代的来临

chatGPT是一种人工智能技术驱动的自然语言处理工具&#xff0c;是一种基于语言对话场景的语言模型&#xff0c;它使用了Transformer神经网络架构&#xff0c;也是GPT-3.5架构&#xff0c;功能具备上知天文下知地理&#xff0c;还可以进行撰写邮件、视频脚本、文案、翻译、代码等…

windows的软件能在鸿蒙系统运行吗,如果鸿蒙系统能不能兼容windows的所有应用软件,会让你惊喜吗...

如果华为能够让鸿蒙系统兼容Windows系统上所有的应用&#xff0c;那华为鸿蒙系统可能已经超脱时代了。 你得知道在两个不同平台&#xff0c;硬件和内核不同的情况下&#xff0c;华为如果想兼容所有的平台&#xff0c;可能所花费的人力&#xff0c;财力会更巨大。我们知道鸿蒙系…

为什么鸿蒙内核是安卓,鸿蒙系统发布,为什么有人说其为安卓换壳?

2021年4月&#xff0c;鸿蒙系统内测版正式面向消费者开放&#xff0c;而我由于在校读书也变没有时间去专门去进行鸿蒙系统的深度体验只是回来后简单的体验一下 首先我要说的是-鸿蒙它……不是安卓套壳&#xff01;&#xff01;&#xff01;我之前在评论区经常看见有人说鸿蒙就是…

华为p10 鸿蒙,全面上线!华为鸿蒙新消息传来,这是要彻底替换安卓

自从手机出现后&#xff0c;手机操作系统就掌握在少数几个厂商手中&#xff0c;在功能机时代&#xff0c;诺基亚几乎掌控了塞班系统&#xff0c;而微则掌握Windows mobie系统。 苹果开启智能手机时代后&#xff0c;手机系统主要被苹果和谷歌掌控。其中&#xff0c;苹果的IOS系统…

鸿蒙OS到底是不是Android套皮?(不多说,看源码!)

人生就像一场旅行&#xff0c;不必在乎目的地。在乎的&#xff0c;是沿途的风景以及看风景的心情。 #正文 某人曾说「没有调查就没有发言权」 最近鸿蒙系统关注度好高&#xff0c;支持与反对、看好和看衰、「自主的全场景分布式系统」和「Android套壳」各执一词&#xff0c;吵…