19分布式电商项目 - 运营商系统登录与安全控制

简介: 19分布式电商项目 - 运营商系统登录与安全控制

代码已上传至Github

地址:https://github.com/ylw-github/pingyougou.git

版本号:9c0e45bedde7be8ba1e2e5b9e0c1b96fc52d506b

需求分析

完成运营商登陆功能

登录功能的实现

1.配置文件

(1)修改 pinyougou-manager-web 的 pom.xml ,添加依赖:

<!-- 身份验证 -->
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-config</artifactId>
    </dependency>

(2)修改 web.xml

<!-- spring security 安全控制过滤器 -->
  <!-- 使用过滤器拦截请求,对这些请求进行安全验证 -->
  <filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

(3)pinyougou-manager-web 的 spring 目录下添加配置文件 spring-security.xml

<?xml version="1.0" encoding="UTF-8"?>
<bean:beans xmlns="http://www.springframework.org/schema/security"
xmlns:bean="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd">
<!-- 在权限认证之前访问资源需要放行 -->
<http pattern="/login.html" security="none"></http>
<http pattern="/error.html" security="none"></http>
<http pattern="/css/**" security="none"></http>
<http pattern="/js/**" security="none"></http>
<http pattern="/img/**" security="none"></http>
<http pattern="/plugins/**" security="none"></http>
<!-- http安全控制规则 -->
<http>
  <intercept-url pattern="/**" access="hasRole('ROLE_USER')"/>
  <!-- 表单认证 -->
  <form-login login-page="/login.html" default-target-url="/admin/index.html" 
    always-use-default-target="true" authentication-failure-url="/error.html"
    login-processing-url="/login"/>
  <!-- 屏蔽跨域 -->
  <csrf disabled="true"/>
  <!-- 配置ifram访问 -->
  <headers>
    <frame-options policy="SAMEORIGIN"/>
  </headers>
  <!-- 推出登录配置 -->
  <!-- logout: spring security 安全框架自动生成推出地址:/logout -->
  <logout logout-success-url="/login.html"/>
</http>
<!-- 配置认证管理器 -->
<authentication-manager>
  <authentication-provider>
    <user-service>
      <user name="admin" password="admin" authorities="ROLE_USER"/>
    </user-service>
  </authentication-provider>  
</authentication-manager>
</bean:beans>
2.登录页面

修改 pinyougou-manager-web 的 login.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=7; IE=EDGE">
  <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
  <title>品优购运营商运营管理后台</title>
   <link rel="icon" href="../assets/img/favicon.ico">
    <link rel="stylesheet" type="text/css" href="css/webbase.css" />
    <link rel="stylesheet" type="text/css" href="css/pages-login-manage.css" />
</head>
<body>
  <div class="loginmanage">
    <div class="py-container">
      <h4 class="manage-title">品优购运营商运营管理后台</h4>
      <div class="loginform">
        <ul class="sui-nav nav-tabs tab-wraped">
          <li>
            <a href="#index" data-toggle="tab">
              <h3>扫描登录</h3>
            </a>
          </li>
          <li class="active">
            <a href="#profile" data-toggle="tab">
              <h3>账户登录</h3>
            </a>
          </li>
        </ul>
        <div class="tab-content tab-wraped">
          <div id="index" class="tab-pane">
            <p>二维码登录,暂为官网二维码</p>
            [外链图片转存失败(img-wC6kpJZs-1562142225697)(https://mp.csdn.net/img/wx_cz.jpg)]
          </div>
          <div id="profile" class="tab-pane  active">
            <form class="sui-form"  id="loginform" action="/login" method="post">
              <div class="input-prepend"><span class="add-on loginname"></span>
                <input id="prependedInput" type="text" name="username"  placeholder="邮箱/用户名/手机号" class="span2 input-xfat">
              </div>
              <div class="input-prepend"><span class="add-on loginpwd"></span>
                <input id="prependedInput" type="password" name="password" placeholder="请输入密码" class="span2 input-xfat">
              </div>
              <div class="setting">
                 <div id="slider">
                  <div id="slider_bg"></div>
                  <span id="label">>></span> <span id="labelTip">拖动滑块验证</span>
                  </div>
              </div>
              <div class="logined">
                <a class="sui-btn btn-block btn-xlarge btn-danger" href="javascript:void(0)" onclick="document:loginform.submit();" target="_blank">登&nbsp;&nbsp;录</a>
              </div>
            </form>
          </div>
        </div>
      </div>
      <div class="clearfix"></div>
    </div>
  </div>
  <!--foot-->
  <div class="py-container copyright">
    <ul>
      <li>关于我们</li>
      <li>联系我们</li>
      <li>联系客服</li>
      <li>商家入驻</li>
      <li>营销中心</li>
      <li>手机品优购</li>
      <li>销售联盟</li>
      <li>品优购社区</li>
    </ul>
    <div class="address">地址:北京市昌平区建材城西路金燕龙办公楼一层 邮编:100096 电话:400-618-4000 传真:010-82935100</div>
    <div class="beian">京ICP备08001421号京公网安备110108007702
    </div>
  </div>
<script type="text/javascript" src="js/plugins/jquery/jquery.min.js"></script>
<script type="text/javascript" src="js/plugins/sui/sui.min.js"></script>
<script type="text/javascript" src="js/plugins/jquery-placeholder/jquery.placeholder.min.js"></script>
<script src="js/pages/jquery.slideunlock.js"></script>
<script>
  $(function(){
    var slider = new SliderUnlock("#slider",{
        successLabelTip : "欢迎访问品优购" 
      },function(){
        // alert("验证成功,即将跳转至首页");
              // window.location.href="index.html"
          });
        slider.init();
  })
  </script>
</body>
</html>

参照 login.html 创建 loginerror.html 页面

主页面显示登录人

1.后端代码
package com.pyg.manager.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/login")
public class LoginController {
  /**
   * 需求:获取当前用户的登录信息
   */
  @RequestMapping("/loadLoginName")
  public Map loadLoginName(){
    //获取用户名
    //使用安全框架获取用户登录名
    String username = SecurityContextHolder.getContext().getAuthentication().getName();
    //创建map对象
    Map map = new HashMap();
    //把用户名放入map
    map.put("loginName", username);
    return map;
  }
}
2.前端代码

(1)新建 loginService.js

//抽取服务
app.service("loginService", function($http) {
  // 获取用户登录名
  this.loadLoginName = function() {
    return $http.get("../login/loadLoginName");
  };
});

(2)新建 loginController.js

//定义控制器
app.controller("loginController", function($scope,loginService) {
  //获取用户登录名
  $scope.loadLoginName = function(){
    //调用服务层方法
    loginService.loadLoginName().success(
        function(data){
          $scope.loginName = data.loginName;
        }
    );
  };
});

页面上引入 JS , 用表达式显示(代码略)

退出登录

在 pinyougou-manager-web 的 spring-security.xml 的 http 节点中添加配置

<!-- 退出登录配置 -->
<!-- logout: spring security 安全框架自动生成退出地址:/logout -->
<logout logout-success-url="/login.html"/>

加此配置后,会自动的产生退出登录的地址/logout 。

logout-url: 退出的地址,会自动生成

logout-success-url: 退出后跳转的地址

修改注销的链接

<div class="pull-right">
   <a href="../logout" class="btn btn-default btn-flat">注销</a>
</div>




目录
相关文章
|
Kubernetes 大数据 调度
Airflow vs Argo Workflows:分布式任务调度系统的“华山论剑”
本文对比了Apache Airflow与Argo Workflows两大分布式任务调度系统。两者均支持复杂的DAG任务编排、社区支持及任务调度功能,且具备优秀的用户界面。Airflow以Python为核心语言,适合数据科学家使用,拥有丰富的Operator库和云服务集成能力;而Argo Workflows基于Kubernetes设计,支持YAML和Python双语定义工作流,具备轻量化、高性能并发调度的优势,并通过Kubernetes的RBAC机制实现多用户隔离。在大数据和AI场景中,Airflow擅长结合云厂商服务,Argo则更适配Kubernetes生态下的深度集成。
1425 34
|
10月前
|
缓存 Cloud Native 中间件
《聊聊分布式》从单体到分布式:电商系统架构演进之路
本文系统阐述了电商平台从单体到分布式架构的演进历程,剖析了单体架构的局限性与分布式架构的优势,结合淘宝、京东等真实案例,深入探讨了服务拆分、数据库分片、中间件体系等关键技术实践,并总结了渐进式迁移策略与核心经验,为大型应用架构升级提供了全面参考。
|
11月前
|
存储 算法 安全
“卧槽,系统又崩了!”——别慌,这也许是你看过最通俗易懂的分布式入门
本文深入解析分布式系统核心机制:数据分片与冗余副本实现扩展与高可用,租约、多数派及Gossip协议保障一致性与容错。探讨节点故障、网络延迟等挑战,揭示CFT/BFT容错原理,剖析规模与性能关系,为构建可靠分布式系统提供理论支撑。
474 2
|
11月前
|
机器学习/深度学习 算法 安全
新型电力系统下多分布式电源接入配电网承载力评估方法研究(Matlab代码实现)
新型电力系统下多分布式电源接入配电网承载力评估方法研究(Matlab代码实现)
319 3
|
数据采集 缓存 NoSQL
分布式新闻数据采集系统的同步效率优化实战
本文介绍了一个针对高频新闻站点的分布式爬虫系统优化方案。通过引入异步任务机制、本地缓存池、Redis pipeline 批量写入及身份池策略,系统采集效率提升近两倍,数据同步延迟显著降低,实现了分钟级热点追踪能力,为实时舆情监控与分析提供了高效、稳定的数据支持。
547 1
分布式新闻数据采集系统的同步效率优化实战
|
安全 开发工具 git
git分布式版本控制系统及在码云上创建项目并pull和push
通过本文的介绍,我们详细讲解了Git的基本概念和工作流程,并展示了如何在码云上创建项目及进行pull和push操作。Git作为一种分布式版本控制系统,为开发者提供了强大的工具来管理代码变更和协作开发。希望本文能帮助您更好地理解和使用Git及码云,提高开发效率和代码质量。
817 18
|
安全 开发工具 git
git分布式版本控制系统及在码云上创建项目并pull和push
通过本文的介绍,我们详细讲解了Git的基本概念和工作流程,并展示了如何在码云上创建项目及进行pull和push操作。Git作为一种分布式版本控制系统,为开发者提供了强大的工具来管理代码变更和协作开发。希望本文能帮助您更好地理解和使用Git及码云,提高开发效率和代码质量。
539 16
|
存储 运维 安全
盘古分布式存储系统的稳定性实践
本文介绍了阿里云飞天盘古分布式存储系统的稳定性实践。盘古作为阿里云的核心组件,支撑了阿里巴巴集团的众多业务,确保数据高可靠性、系统高可用性和安全生产运维是其关键目标。文章详细探讨了数据不丢不错、系统高可用性的实现方法,以及通过故障演练、自动化发布和健康检查等手段保障生产安全。总结指出,稳定性是一项系统工程,需要持续迭代演进,盘古经过十年以上的线上锤炼,积累了丰富的实践经验。
1514 7
|
存储 分布式计算 Hadoop
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
625 7
|
Cloud Native 关系型数据库 分布式数据库
PolarDB 分布式版 V2.0,安全可靠的集中分布式一体化数据库管理软件
阿里云PolarDB数据库管理软件(分布式版)V2.0 ,安全可靠的集中分布式一体化数据库管理软件。

热门文章

最新文章