【尚筹网】IDEA版实现(十)登录跳转&Session相关问题

由于尚硅谷的视频是通过Eclipse软件来做的,其中有些操作与IDEA上有所区别,所以我在这里将IDEA区别于Eclipse的操作、操作过程中涉及的源码(与视频的源码略有出入)以及大家可能遇到的种种问题分享给大家,这些源码在我这里均是通过测试的,仅供参考!

1 OSS服务

按照工程文档一步步操作就可以,这里不再截图演示。

2 OSS整合至项目

2.1 Pom配置

修改project-consumer\pom.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

    <!-- 引入springboot&redis整合场景 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

    <!-- 引入springboot&springsession整合场景 -->
    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-openfeign-core</artifactId>
    </dependency>
</dependencies>

2.2 主启动类&OSSProperties&application

新建project-consumer\src\main\java\com\atguigu\crowd\CrowdMainClass.java

package com.atguigu.crowd;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

//启用Feign客户端功能
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class CrowdMainClass {

    public static void main(String[] args) {
        SpringApplication.run(CrowdMainClass.class, args);
    }

}

新建project-consumer\src\main\java\com\atguigu\crowd\config\OSSProperties.java

package com.atguigu.crowd.config;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class OSSProperties {

    private String endPoint;
    private String bucketName;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketDomain;

}

新建project-consumer\src\main\resources\application.yml

server:
port: 5000

spring:
application:
  name: atguigu-crowd-project
thymeleaf:
  prefix: classpath:/templates/
  suffix: .html
redis:
  host: 127.0.0.1
session:
  store-type: redis

eureka:
client:
  service-url:
  defaultZone: http://localhost:1000/eureka

aliyun:
oss:
  access-key-id: LTAI5tF97XxYjpbT8z5yEzf2
  access-key-secret: ixnXE8Q8LMvk7H41zAuegitMHTKrRm
  bucket-domain: 961147939.oss-cn-beijing.aliyuncs.com
  bucket-name: 961147939
  end-point: oss-cn-beijing.aliyuncs.com

注:OSS里面五项均需要填报在第1步申请服务时获得的数据!!

2.3 后端部分

修改util\pom.xml

<!-- OSS客户端SDK -->
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.14.0</version>
</dependency>

修改util\src\main\java\com\atguigu\crowd\util\CrowdUtil.java

    /**
     * 专门负责上传文件到OSS服务器的工具方法
     * @param endpoint			OSS参数
     * @param accessKeyId		OSS参数
     * @param accessKeySecret	OSS参数
     * @param inputStream		要上传的文件的输入流
     * @param bucketName		OSS参数
     * @param bucketDomain		OSS参数
     * @param originalName		要上传的文件的原始文件名
     * @return	包含上传结果以及上传的文件在OSS上的访问路径
     */
    public static ResultEntity<String> uploadFileToOss(
            String endpoint,
            String accessKeyId,
            String accessKeySecret,
            InputStream inputStream,
            String bucketName,
            String bucketDomain,
            String originalName) {

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 生成上传文件的目录
        String folderName = new SimpleDateFormat("yyyyMMdd").format(new Date());

        // 生成上传文件在OSS服务器上保存时的文件名
        // 原始文件名:beautfulgirl.jpg
        // 生成文件名:wer234234efwer235346457dfswet346235.jpg
        // 使用UUID生成文件主体名称
        String fileMainName = UUID.randomUUID().toString().replace("-", "");

        // 从原始文件名中获取文件扩展名
        String extensionName = originalName.substring(originalName.lastIndexOf("."));

        // 使用目录、文件主体名称、文件扩展名称拼接得到对象名称
        String objectName = folderName + "/" + fileMainName + extensionName;

        try {
            // 调用OSS客户端对象的方法上传文件并获取响应结果数据
            PutObjectResult putObjectResult = ossClient.putObject(bucketName, objectName, inputStream);

            // 从响应结果中获取具体响应消息
            ResponseMessage responseMessage = putObjectResult.getResponse();

            // 根据响应状态码判断请求是否成功
            if(responseMessage == null) {

                // 拼接访问刚刚上传的文件的路径
                String ossFileAccessPath = bucketDomain + "/" + objectName;

                // 当前方法返回成功
                return ResultEntity.successWithData(ossFileAccessPath);
            } else {
                // 获取响应状态码
                int statusCode = responseMessage.getStatusCode();

                // 如果请求没有成功,获取错误消息
                String errorMessage = responseMessage.getErrorResponseAsString();

                // 当前方法返回失败
                return ResultEntity.failed("当前响应状态码="+statusCode+" 错误消息="+errorMessage);
            }
        } catch (Exception e) {
            e.printStackTrace();

            // 当前方法返回失败
            return ResultEntity.failed(e.getMessage());
        } finally {

            if(ossClient != null) {

                // 关闭OSSClient。
                ossClient.shutdown();
            }
        }
    }

3 跳转到发起项目页面

3.1 前端部分

修改authentication-consumer\src\main\resources\templates\member-center.html

<div class="list-group-item " style="cursor:pointer;">
    <a th:href="@{/member/my/crowd}">我的众筹</a><span class="badge"><i class="glyphicon glyphicon-chevron-right"></i></span>
</div>

新建authentication-consumer\src\main\resources\templates\member-crowd.html

<!DOCTYPE html>
<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="description" content="">
  <meta name="author" content="">
  <base th:href="@{/}"/>
  <link rel="stylesheet" href="bootstrap/css/bootstrap.css">
  <link rel="stylesheet" href="css/font-awesome.min.css">
  <link rel="stylesheet" href="css/theme.css">
  <script src="jquery/jquery-3.6.0.js"></script>
  <script src="bootstrap/js/bootstrap.js"></script>
  <script src="script/docs.min.js"></script>
  <script src="script/back-to-top.js"></script>

  <style>
    #footer {
      padding: 15px 0;
      background: #fff;
      border-top: 1px solid #ddd;
      text-align: center;
    }
    #topcontrol {
      color: #fff;
      z-index: 99;
      width: 30px;
      height: 30px;
      font-size: 20px;
      background: #222;
      position: relative;
      right: 14px !important;
      bottom: 11px !important;
      border-radius: 3px !important;
    }

    #topcontrol:after {
      /*top: -2px;*/
      left: 8.5px;
      content: "\f106";
      position: absolute;
      text-align: center;
      font-family: FontAwesome;
    }

    #topcontrol:hover {
      color: #fff;
      background: #18ba9b;
      -webkit-transition: all 0.3s ease-in-out;
      -moz-transition: all 0.3s ease-in-out;
      -o-transition: all 0.3s ease-in-out;
      transition: all 0.3s ease-in-out;
    }

  </style>
</head>
<body>
<div class="navbar-wrapper">
  <div class="container">
    <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
      <div class="container">
        <div class="navbar-header">
          <a class="navbar-brand" href="#" style="font-size:32px;">尚筹网-创意产品众筹平台</a>
        </div>
        <div id="navbar" class="navbar-collapse collapse" style="float:right;">
          <ul class="nav navbar-nav">
            <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="glyphicon glyphicon-user"></i> [[${session.loginMember.username}]] <span class="caret"></span></a>
              <ul class="dropdown-menu" role="menu">
                <li><a href="member.html"><i class="glyphicon glyphicon-scale"></i> 会员中心</a></li>
                <li><a href="#"><i class="glyphicon glyphicon-comment"></i> 消息</a></li>
                <li class="divider"></li>
                <li><a href="index.html" th:href="@{/auth/member/logout}"><i class="glyphicon glyphicon-off"></i> 退出系统</a></li>
              </ul>
            </li>
          </ul>
        </div>
      </div>
    </nav>

  </div>
</div>
<div class="container">
  <div class="row clearfix">
    <div class="col-sm-3 col-md-3 column">
      <div class="row">
        <div class="col-md-12">
          <div class="thumbnail" style="    border-radius: 0px;">
            <img src="img/services-box1.jpg" class="img-thumbnail" alt="A generic square placeholder image with a white border around it, making it resemble a photograph taken with an old instant camera">
            <div class="caption" style="text-align:center;">
              <h3>
                [[${session.loginMember.username}]]
              </h3>
              <span class="label label-danger" style="cursor:pointer;" onclick="window.location.href='cert.html'">未实名认证</span>
            </div>
          </div>
        </div>
      </div>
      <div class="list-group">
        <div class="list-group-item" style="cursor:pointer;" onclick="window.location.href='member.html'">
          资产总览<span class="badge"><i class="glyphicon glyphicon-chevron-right"></i></span>
        </div>
        <div class="list-group-item active">
          我的众筹<span class="badge"><i class="glyphicon glyphicon-chevron-right"></i></span>
        </div>
      </div>
    </div>
    <div class="col-sm-9 col-md-9 column">
      <ul id="myTab" style="" class="nav nav-pills" role="tablist">
        <li role="presentation" class="active"><a href="#home" role="tab" data-toggle="tab" aria-controls="home" aria-expanded="true">我的众筹</a></li>
        <li role="presentation"><a href="#profile">众筹资产</a></li>
      </ul>
      <div id="myTabContent" class="tab-content" style="margin-top:10px;">
        <div role="tabpanel" class="tab-pane fade active in" id="home" aria-labelledby="home-tab">

          <ul id="myTab1" class="nav nav-tabs">
            <li role="presentation" class="active"><a href="#support">我支持的</a></li>
            <li role="presentation"><a href="#attension">我关注的</a></li>
            <li role="presentation"><a href="#add">我发起的</a></li>
            <li class=" pull-right">
              <button type="button" class="btn btn-warning" onclick="window.location.href='start.html'">发起众筹</button>
            </li>
          </ul>
          <div id="myTab1" class="tab-content" style="margin-top:10px;">
            <div role="tabpanel" class="tab-pane fade active in" id="support" aria-labelledby="home-tab">
              <div class="container-fluid">
                <div class="row clearfix">
                  <div class="col-md-12 column">
                    <span class="label label-warning">全部</span> <span class="label" style="color:#000;">已支付</span> <span class="label " style="color:#000;">未支付</span>
                  </div>
                  <div class="col-md-12 column" style="margin-top:10px;padding:0;">
                    <table class="table table-bordered" style="text-align:center;">
                      <thead>
                      <tr style="background-color:#ddd;">
                        <td>项目信息</td>
                        <td width="90">支持日期</td>
                        <td width="120">支持金额(元)</td>
                        <td width="80">回报数量</td>
                        <td width="80">交易状态</td>
                        <td width="120">操作</td>
                      </tr>
                      </thead>
                      <tbody>
                      <tr>
                        <td style="vertical-align:middle;">
                          <div class="thumbnail">
                            <div class="caption">
                              <h3>
                                活性富氢净水直饮机
                              </h3>
                              <p>
                                订单编号:2x002231111
                              </p>
                              <p>
                              <div style="float:left;"><i class="glyphicon glyphicon-screenshot" title="目标金额" ></i> 已完成 100% </div>
                              <div style="float:right;"><i title="截至日期" class="glyphicon glyphicon-calendar"></i> 剩余8天 </div>
                              </p>
                              <br>
                              <div class="progress" style="margin-bottom: 4px;">
                                <div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100" style="width: 40%">
                                  <span >众筹中</span>
                                </div>
                              </div>
                            </div>
                          </div>
                        </td>
                        <td style="vertical-align:middle;">2017-05-23 11:31:22</td>
                        <td style="vertical-align:middle;">1.00<br>(运费:0.00 )</td>
                        <td style="vertical-align:middle;">1</td>
                        <td style="vertical-align:middle;">交易关闭</td>
                        <td style="vertical-align:middle;">
                          <div class="btn-group-vertical" role="group" aria-label="Vertical button group">
                            <button type="button" class="btn btn-default">删除订单</button>
                            <button type="button" class="btn btn-default">交易详情</button>
                          </div>
                        </td>
                      </tr>
                      <tr>
                        <td style="vertical-align:middle;">
                          <div class="thumbnail">
                            <div class="caption">
                              <h3>
                                BAVOSN便携折叠移动电源台灯
                              </h3>
                              <p>
                                订单编号:2x002231111
                              </p>
                              <p>
                              <div style="float:left;"><i class="glyphicon glyphicon-screenshot" title="目标金额" ></i> 已完成 100% </div>
                              <div style="float:right;"><i title="截至日期" class="glyphicon glyphicon-calendar"></i> 剩余8天 </div>
                              </p>
                              <br>
                              <div class="progress" style="margin-bottom: 4px;">
                                <div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100" style="width: 40%">
                                  <span >众筹成功</span>
                                </div>
                              </div>
                            </div>
                          </div>
                        </td>
                        <td style="vertical-align:middle;">2017-05-23 11:31:22</td>
                        <td style="vertical-align:middle;">1.00<br>(运费:0.00 )</td>
                        <td style="vertical-align:middle;">1</td>
                        <td style="vertical-align:middle;">交易关闭</td>
                        <td style="vertical-align:middle;">
                          <div class="btn-group-vertical" role="group" aria-label="Vertical button group">
                            <button type="button" class="btn btn-default">删除订单</button>
                            <button type="button" class="btn btn-default">交易详情</button>
                          </div>
                        </td>
                      </tr>
                      </tbody>
                    </table>
                  </div>
                </div>
              </div>
            </div>
            <div role="tabpanel" class="tab-pane fade" id="attension" aria-labelledby="attension-tab">
              <div class="container-fluid">
                <div class="row clearfix">
                  <div class="col-md-12 column" style="padding:0;">
                    <table class="table table-bordered" style="text-align:center;">
                      <thead>
                      <tr style="background-color:#ddd;">
                        <td>项目信息</td>
                        <td width="120">支持人数</td>
                        <td width="120">关注人数</td>
                        <td width="120">操作</td>
                      </tr>
                      </thead>
                      <tbody>
                      <tr>
                        <td style="vertical-align:middle;">
                          <div class="thumbnail">
                            <div class="caption">
                              <p>
                                BAVOSN便携折叠移动电源台灯
                              </p>
                              <p>
                                <i class="glyphicon glyphicon-jpy"></i> 已筹集 1000.0元
                              </p>
                              <p>
                              <div style="float:left;"><i class="glyphicon glyphicon-screenshot" title="目标金额" ></i> 已完成 100% </div>
                              <div style="float:right;"><i class="glyphicon glyphicon-calendar"></i> 剩余2天 </div>
                              </p>
                              <br>
                              <div class="progress" style="margin-bottom: 4px;">
                                <div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100" style="width: 40%">
                                  <span >众筹中</span>
                                </div>
                              </div>
                            </div>
                          </div>
                        </td>
                        <td style="vertical-align:middle;">1</td>
                        <td style="vertical-align:middle;">1</td>
                        <td style="vertical-align:middle;">
                          <div class="btn-group-vertical" role="group" aria-label="Vertical button group">
                            <button type="button" class="btn btn-default">取消关注</button>
                          </div>
                        </td>
                      </tr>
                      </tbody>
                    </table>
                  </div>
                </div>
              </div>
            </div>
            <div role="tabpanel" class="tab-pane fade  " id="add" aria-labelledby="add-tab">
              <div class="container-fluid">
                <div class="row clearfix">
                  <div class="col-md-12 column">
                    <span class="label label-warning">全部</span> <span class="label" style="color:#000;">众筹中</span> <span class="label " style="color:#000;">众筹成功</span>  <span class="label " style="color:#000;">众筹失败</span>
                  </div>
                  <div class="col-md-12 column" style="padding:0;margin-top:10px;">
                    <table class="table table-bordered" style="text-align:center;">
                      <thead>
                      <tr style="background-color:#ddd;">
                        <td>项目信息</td>
                        <td width="120">募集金额(元)</td>
                        <td width="80">当前状态</td>
                        <td width="120">操作</td>
                      </tr>
                      </thead>
                      <tbody>
                      <tr>
                        <td style="vertical-align:middle;">
                          <div class="thumbnail">
                            <div class="caption">
                              <p>
                                BAVOSN便携折叠移动电源台灯
                              </p>
                              <p>
                              <div style="float:left;"><i class="glyphicon glyphicon-screenshot" title="目标金额" ></i> 已完成 100% </div>
                              <div style="float:right;"><i title="截至日期" class="glyphicon glyphicon-calendar"></i> 剩余8天 </div>
                              </p>
                              <br>
                              <div class="progress" style="margin-bottom: 4px;">
                                <div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100" style="width: 40%">
                                  <span >众筹中</span>
                                </div>
                              </div>
                            </div>
                          </div>
                        </td>
                        <td style="vertical-align:middle;">1.00<br>(运费:0.00 )</td>
                        <td style="vertical-align:middle;">草稿</td>
                        <td style="vertical-align:middle;">
                          <div class="btn-group-vertical" role="group" aria-label="Vertical button group">
                            <button type="button" class="btn btn-default">项目预览</button>
                            <button type="button" class="btn btn-default">修改项目</button>
                            <button type="button" class="btn btn-default">删除项目</button>
                            <button type="button" class="btn btn-default">问题管理</button>
                          </div>
                        </td>
                      </tr>
                      </tbody>
                    </table>
                  </div>
                </div>
              </div>
            </div>
          </div>

        </div>
        <div role="tabpanel" class="tab-pane fade" id="profile" aria-labelledby="profile-tab">
          众筹资产
        </div>
      </div>
    </div>
  </div>
</div>
<div class="container" style="margin-top:20px;">
  <div class="row clearfix">
    <div class="col-md-12 column">
      <div id="footer">
        <div class="footerNav">
          <a rel="nofollow" href="http://www.atguigu.com">关于我们</a> | <a rel="nofollow" href="http://www.atguigu.com">服务条款</a> | <a rel="nofollow" href="http://www.atguigu.com">免责声明</a> | <a rel="nofollow" href="http://www.atguigu.com">网站地图</a> | <a rel="nofollow" href="http://www.atguigu.com">联系我们</a>
        </div>
        <div class="copyRight">
          Copyright ?2017-2017atguigu.com 版权所有
        </div>
      </div>

    </div>
  </div>
</div>
<script>
  $('#myTab a').click(function (e) {
    e.preventDefault()
    $(this).tab('show')
  })
  $('#myTab1 a').click(function (e) {
    e.preventDefault()
    $(this).tab('show')
  })
</script>
</body>
</html>

修改authentication-consumer\src\main\java\com\atguigu\crowd\config\CrowdWebMvcConfig.java

registry.addViewController("/member/my/crowd").setViewName("member-crowd");

3.2 测试

进入资产总览页面,点击我的众筹即可进入:

在这里插入图片描述

3.3 Zuul重定向地址

修改authentication-consumer\src\main\java\com\atguigu\crowd\handler\MemberHandler.java

return "redirect:http://www.crowd.com/";
return "redirect:http://www.crowd.com/auth/member/to/center/page";
return "redirect:http://www.crowd.com/auth/member/to/login/page";

等一切重定向地址均添加crowd.com前缀

3.4 login参数无法序列化处理

修改atcrowdfunding09-member-entity\src\main\java\com\atguigu\crowd\entity\vo\MemberLoginVO.java

public class MemberLoginVO implements Serializable {

    private static final long serialVersionUID = 1L;

    private Integer id;

    private String username;

    private String email;
}

3.5 Zuulfilter反序列化处理

修改zuul\src\main\java\com\atguigu\crowd\filter\CrowdAccessFilter.java

// 3.尝试从 Session 对象中获取已登录用户
MemberLoginVO loginMember = (MemberLoginVO) session.getAttribute(CrowdConstant.ATTR_NAME_LOGIN_MEMBER);

并根据提示增加entity的依赖即可

3.6 crowd.com 系列测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值