热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

拦截器问题详情登陆问题编辑功能(5)

1.拦截器配置1.1WebConfig

1. 拦截器配置

1.1 WebConfig

拦截器-问题详情-登陆问题-编辑功能-(5)

package life.guohui.community.interceptor; @Configuration public class WebConfig implements WebMvcConfigurer { @Autowired private SessionInterceptor sessionInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(sessionInterceptor).addPathPatterns("/**"); } }

1.2 自定义拦截器

拦截器-问题详情-登陆问题-编辑功能-(5)

package life.guohui.community.interceptor; @Service public class SessionInterceptor implements HandlerInterceptor { @Autowired private UserMapper userMapper; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { COOKIE[] COOKIEs = request.getCOOKIEs(); if (COOKIEs != null && COOKIEs.length != 0) { for (COOKIE COOKIE : COOKIEs) { if (COOKIE.getName().equals("token")) { String token = COOKIE.getValue(); User user = userMapper.findByToken(token); if (user != null) { request.getSession().setAttribute("user", user); } break; } } } return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }

1.3 修改之前代码

拦截器-问题详情-登陆问题-编辑功能-(5)

2. 问题详情功能

2.1 QuestionController

拦截器-问题详情-登陆问题-编辑功能-(5)

2.2 service

拦截器-问题详情-登陆问题-编辑功能-(5)

2.3 mapper

@Select("select * from question where id = #{id}") Question getById(@Param("id") Integer id);

2.4 复制profile.html到question.html

a. 初始页面


发起人

相关问题

2.5 index.html添加连接

拦截器-问题详情-登陆问题-编辑功能-(5)

2.6 给编辑按钮自定义css

拦截器-问题详情-登陆问题-编辑功能-(5)
拦截器-问题详情-登陆问题-编辑功能-(5)

头像变成圆的样式

拦截器-问题详情-登陆问题-编辑功能-(5)

2.7 页面效果

拦截器-问题详情-登陆问题-编辑功能-(5)

2.8 页面代码

......

作者:[[${question.user.name}]] | 发布时间:[[${#dates.format(question.gmtCreate,'yyyy-MM-dd HH:mm')}]] | 阅读数:[[${question.viewCount}]]


编辑

发起人


相关问题

3. 登陆问题

3.1 显示编辑按钮的条件

question.html

编辑

3.2 登陆需要修改

a. 用户登陆时需要判断AccountId是否存在

拦截器-问题详情-登陆问题-编辑功能-(5)

b. 创建UserService

创建时间放到service

拦截器-问题详情-登陆问题-编辑功能-(5)

package life.guohui.community.service; @Service public class UserService { @Autowired private UserMapper userMapper; public void createOrUpdate(User user) { User dbUser = userMapper.findByAccountId(user.getAccountId()); if(dbUser == null){ //插入 user.setGmtCreate(System.currentTimeMillis()); user.setGmtModified(user.getGmtCreate()); userMapper.insert(user); }else{ dbUser.setGmtModified(System.currentTimeMillis()); dbUser.setAvatarUrl(user.getAvatarUrl()); dbUser.setName(user.getName()); dbUser.setToken(user.getToken()); userMapper.update(dbUser); } } }

c. UserMapper

@Select("select * from user where account_id = #{accountId}") User findByAccountId(@Param("accountId") String accountId); @Update("update user set name=#{name},token=#{token},gmt_modified=#{gmtModified},avatar_url=#{avatarUrl} where id = #{id}") void update(User user);

3.3 退出登陆

拦截器-问题详情-登陆问题-编辑功能-(5)
拦截器-问题详情-登陆问题-编辑功能-(5)

@GetMapping("/logout") public String logout(HttpServletRequest request, HttpServletResponse response){ request.getSession().removeAttribute("user"); COOKIE COOKIE = new COOKIE("token",null); COOKIE.setMaxAge(0); response.addCOOKIE(COOKIE); return "redirect:/"; }

4. 编辑功能实现

4.1 controller路径

拦截器-问题详情-登陆问题-编辑功能-(5)
拦截器-问题详情-登陆问题-编辑功能-(5)

package life.guohui.community.controller; @Controller public class PublishController { @Autowired private QuestionService questionService; @GetMapping("/publish/{id}") public String edit(@PathVariable(name = "id") Integer id, Model model){ QuestionDTO question = questionService.getById(id); model.addAttribute("title",question.getTitle()); model.addAttribute("description",question.getDescription()); model.addAttribute("tag",question.getTag()); model.addAttribute("id",question.getId()); return "publish"; } ...... }

4.2 service中getById

拦截器-问题详情-登陆问题-编辑功能-(5)

public QuestionDTO getById(Integer id) { Question question = questionMapper.getById(id); QuestionDTO questiOnDTO= new QuestionDTO(); BeanUtils.copyProperties(question,questionDTO); User user = userMapper.findById(question.getCreator()); questionDTO.setUser(user); return questionDTO; }

4.3 给表单中添加id属性

拦截器-问题详情-登陆问题-编辑功能-(5)

4.4 在service中判断修改还是添加

时间的创建移动到service

拦截器-问题详情-登陆问题-编辑功能-(5)
拦截器-问题详情-登陆问题-编辑功能-(5)

public void createOrUpdate(Question question) { if(question.getId() == null){ question.setGmtCreate(System.currentTimeMillis()); question.setGmtModified(question.getGmtCreate()); questionMapper.create(question); }else { //更新 question.setGmtModified(question.getGmtCreate()); questionMapper.update(question); } }

4.5 Mapper中的方法

拦截器-问题详情-登陆问题-编辑功能-(5)

@Select("select * from question where id = #{id}") Question getById(@Param("id") Integer id); @Update({"update question set title = #{title},description=#{description},gmt_modified= #{gmtModified},tag = #{tag} where id = #{id}"}) void update(Question question);

推荐阅读
  • Asp.net Mvc Framework 七 (Filter及其执行顺序) 的应用示例
    本文介绍了在Asp.net Mvc中应用Filter功能进行登录判断、用户权限控制、输出缓存、防盗链、防蜘蛛、本地化设置等操作的示例,并解释了Filter的执行顺序。通过示例代码,详细说明了如何使用Filter来实现这些功能。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • Python开源库和第三方包的常用框架及库
    本文介绍了Python开源库和第三方包中常用的框架和库,包括Django、CubicWeb等。同时还整理了GitHub中最受欢迎的15个Python开源框架,涵盖了事件I/O、OLAP、Web开发、高性能网络通信、测试和爬虫等领域。 ... [详细]
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
author-avatar
浪之音_544
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有