SpringBoot框架:后台管理

SpringBoot框架:后台管理



管理员登录

  • 构建登录页面和后台管理页面
    • 后台管理首页:按照后台博客列表管理页面设计即可管理
    • 管理员登录页面:Semantic UI 官网布局选项里有登录表单,直接照着写即可
  • UserServiceUserRespository
    • com.xxx包下新建一个 service的包,用来存放业务逻辑处理的相关文件
    • 新建一个名为 UserService的接口文件(Interface),定义用户服务的接口
      package com.skgxsn.blog_idea2017.service;
      
      import com.skgxsn.blog_idea2017.po.User;
      
      public interface UserService {
      
          User checkUser(String username, String password);
      }
    • 实现接口,同包下新建 UserServiceImpl.java用来实现接口
      package com.skgxsn.blog_idea2017.service;
      
      import com.skgxsn.blog_idea2017.dao.UserRepository;
      import com.skgxsn.blog_idea2017.po.User;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Service;
      
      @Service
      public class UserServiceImpl implements UserService {
      
          @Autowired
          private UserRepository userRepository;
      
          @Override
          public User checkUser(String username, String password) {
              User user = userRepository.findByUsernameAndPassword(username, password);
              return user;
          }
      }
    • com.xxx包下新建包 dao,用来交互数据库,该包下新建 UserRespository的接口:
      package com.skgxsn.blog_idea2017.dao;
      
      import com.skgxsn.blog_idea2017.po.User;
      import org.springframework.data.jpa.repository.JpaRepository;
      
      public interface UserRepository extends JpaRepository<User, Long> {
      
          User findByUsernameAndPassword(String username, String password);
      }
  • LoginController实现登陆
    • web包下新建 admin包,之下新建 LoginContorller.java,用来实现管理员登录:
      package com.skgxsn.blog_idea2017.web.admin;
      
      import com.skgxsn.blog_idea2017.po.User;
      import com.skgxsn.blog_idea2017.service.UserService;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.PostMapping;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RequestParam;
      import org.springframework.web.servlet.mvc.support.RedirectAttributes;
      
      import javax.servlet.http.HttpSession;
      
      @Controller
      @RequestMapping("/admin")
      public class LoginController {
      
          @Autowired
          private UserService userService;
      
          @GetMapping
          public String loginPage() {
              return "admin/login";
          }
      
          @PostMapping("/login")
          public String login(@RequestParam String username,
                              @RequestParam String password,
                              HttpSession session,
                              RedirectAttributes attributes) {
              User user = userService.checkUser(username, password);
              if (user != null) {
                  user.setPassword(null);
                  session.setAttribute("user", user);
                  return "admin/index";
              }else {
                  attributes.addFlashAttribute("message", "用户名和密码错误");
                  return "redirect:/admin";
              }
          }
      
          @GetMapping("/logout")
          public String logout(HttpSession session) {
              session.removeAttribute("user");
              return "redirect:/admin";
          }
      }
    • login.html中加入登录出错提示信息:
      <div class="ui error mini message"></div>
                          <div class="ui negative mini message" th:unless="${#strings.isEmpty(#messages)}" th:text="${#messages}">用户名或密码错误</div>
    • 定义其 script
      <script>
          $('.ui.form').form({
              fields : {
                  username : {
                      indentifier:'username',
                      rules: [{
                          type : 'empty',
                          prompt : '请输入用户名',
                      }]
                  },
                  password : {
                      indentifier:'password',
                      rules: [{
                          type : 'empty',
                          prompt : '请输入密码',
                      }]
                  }
              }
          })
      </script>
  • MD5加密
    • com.xxx包下新建 Util包用来存储工具类,新建 MD5Utils.java设置加密:
      package com.skgxsn.blog_idea2017.util;
      
      import java.security.MessageDigest;
      import java.security.NoSuchAlgorithmException;
      
      public class MD5Utils {
      
          /**
           * MD5加密类
           * @param str 要加密的字符串
           * @return    几米后的字符串
           */
          public static String code(String str) {
              try {
                  MessageDigest md = MessageDigest.getInstance("MD5");
                  md.update(str.getBytes());
                  byte[] byteDigest = md.digest();
                  int i;
                  StringBuffer buf = new StringBuffer("");
                  for (int offset = 0; offset < byteDigest.length; offset++) {
                      i = byteDigest[offset];
                      if (i < 0)
                          i += 256;
                      if (i < 16)
                          buf.append("0");
                      buf.append(Integer.toHexString(i));
                  }
                  //32位加密
                  return buf.toString();
                  //16位加密
      //            return buf.toString().substring(8, 24);
              } catch (NoSuchAlgorithmException e) {
                  e.printStackTrace();
                  return null;
              }
          }
      
          public static void main(String[] args) {
              System.out.println(code("123456"));
          }
      }
    • UserServiceImpl.java中的 UserCheck 方法中传参时改为 MD5Utils.code(password)即可实现 MD5加密
  • 登陆拦截器
    • 为了防止别人知道你的项目内容后可以轻易登陆博客管理页面,因此要添加登录拦截器,设置用户过滤
    • com.xxx.erb.admin包下新建 BlogController
      package com.skgxsn.blog_idea2017.web.admin;
      
      
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.RequestMapping;
      
      @Controller
      @RequestMapping("/admin")
      public class BlogController {
      
          @GetMapping("/blog-list")
          public String blogList() {
              return "admin/blog-list";
          }
      }
    • com.xxx包下新建包 Interceptor包,建立 LoginInterceptor.javaWecConfig.java文件用来设置登陆拦截器的具体实现:
      // LoginInterceptor.java
      package com.skgxsn.blog_idea2017.Interceptor;
      
      import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
      
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      
      public class LoginInterceptor extends HandlerInterceptorAdapter {
      
          @Override
          public boolean preHandle(HttpServletRequest request,
                                   HttpServletResponse response,
                                   Object handler) throws Exception {
      
              if (request.getSession().getAttribute("user") == null) {
                  response.sendRedirect("/admin");
                  return false;
              }
              return true;
          }
      }
      
      
      //WecConfig.java
      package com.skgxsn.blog_idea2017.Interceptor;
      
      import org.springframework.context.annotation.Configuration;
      import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
      import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
      
      @Configuration
      public class WebConfig extends WebMvcConfigurerAdapter {
      
          @Override
          public void addInterceptors(InterceptorRegistry registry) {
              registry.addInterceptor(new LoginInterceptor())
                      .addPathPatterns("/admin/**")
                      .excludePathPatterns("/admin")
                      .excludePathPatterns("/admin/login");
          }
      }

猜你喜欢

转载自www.cnblogs.com/skygrass0531/p/12551250.html