当前位置: 首页 > news >正文

react redux 登陆拦截

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

112050_qBn5_3647713.png一登陆界面   view=>>>>>>>component

import React ,{Component} from 'react';
 import { bindActionCreators } from 'redux';
import { Link } from 'react-router-dom';
import {Navbar,Nav,NavItem ,NavDropdown ,MenuItem} from "react-bootstrap";
require(`./style.less`)
import { connect } from 'react-redux';
import * as loginvolidate from 'actions/loginvolidate';

@connect (
    state => state,
     dispatch => bindActionCreators(loginvolidate, dispatch)
)

class  Header  extends React.Component {
  constructor(props) {
      super(props);

//验证每次组件发生变化时都会验证
  this.props.loginVolidate_success()
  }

  render() {
        const {data} = this.props.loginvolidate;
        console.log(data)
      return (
        <div>

//登陆用户名设置页面转换
      {data==undefined?

  <Navbar inverse collapseOnSelect>
              <Navbar.Header>
              <Navbar.Brand>
                    狠林首页
              </Navbar.Brand>
              <Navbar.Toggle />
              </Navbar.Header>
        <Navbar.Collapse>
         <Nav pullRight>
           <NavItem eventKey={1} ><Link to='login'>登陆</Link></NavItem>
           <NavItem eventKey={2} ><Link to='register'>注册</Link></NavItem>
           </Nav>
         </Navbar.Collapse>
       </Navbar>
       :
       <Navbar inverse collapseOnSelect>
             <Navbar.Header>
             <Navbar.Brand>
               狠林首页
             </Navbar.Brand>
             <Navbar.Toggle />
             </Navbar.Header>
       <Navbar.Collapse>
        <Nav bsStyle="pills" pullRight >
                <NavDropdown eventKey="4" title={data} id="nav-dropdown">
                  <MenuItem eventKey="4.1">个人中心</MenuItem>
                  <MenuItem eventKey="4.2">会员</MenuItem>
                  <MenuItem eventKey="4.3">发帖管理</MenuItem>
                </NavDropdown>
                 <NavItem eventKey="2" title="Item">消息</NavItem>
                 <NavItem eventKey="1" title="Item">注销</NavItem>
              </Nav>
      </Navbar.Collapse>
   </Navbar>
}
      </div>
      )
  }
}

export  default  Header;

二 actions

import fetch from 'isomorphic-fetch';
import queryString from 'queryString'
export const success = (data) => ({
    type: 'loginVolidate_success',
    data:data.data

})

// 页面初次渲染时获取数据
export const loginVolidate_success = () => {

    return dispatch => {

//这里需要在server.js中设置拦截 否则写全http:localhost:8080/dog/login/loginVolidate.do

          fetch('/dog/login/loginVolidate.do', {    
            credentials: 'include',   //必须加上用来与后台session进行交互,否则,会发现后台session为null
            method: 'POST',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
            },
            body: queryString.stringify()
        })
        .then((response) => {

               if(response.ok){
                  return  response.json();
                }
        })
        .then(data=>{
            dispatch(success(data))
        })
        .catch(()=>alert('用户名或密码错误'))
    }
}

三redux

const initState = {
}

export const loginvolidate = (state = initState, action) => {
    switch (action.type) {
        case "loginVolidate_success":
            return {
                ...state,
                data: action.data
            }
        default:
            return state
    }
}

store与相关配置

后台:springmvc

package com.Tieba.controller;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.SessionAttributes;

import dog.User;

@Controller
@RequestMapping("/login")
public class loginController {
     

     @RequestMapping(value="/loginUser", method=RequestMethod.POST)
     @ResponseBody
    public Map<String, Object> loginUser(HttpServletRequest req,HttpServletResponse res,
            HttpSession session){
         
            System.out.println(req.getParameter("user"));
            System.out.println(req.getParameter("psw"));
            session.setAttribute("user", req.getParameter("user"));
           
            Map<String,Object> map = new HashMap<String, Object>();
            map.put("data", "success");
            
            return map;
        }
     
     @RequestMapping(value="/loginVolidate", method=RequestMethod.POST)
     @ResponseBody
     
    public Map<String, Object> loginVolidate(HttpServletRequest req,HttpSession session){
            
            Map<String,Object> map = new HashMap<String, Object>();
        
            map.put("data", session.getAttribute("user"));
            System.out.println(session.getAttribute("user"));
            
            return map;
            
        }
}

112018_kovk_3647713.png

 

 


 

转载于:https://my.oschina.net/u/3647713/blog/1525402

相关文章:

  • 细谈多个平台编程与网页设计切换启示录----my note
  • elasticsearch 性能监控基础
  • 企业内部DNS从服务器架构的步骤
  • select a method for export 选项
  • 使用JNI与原生代码的通信
  • Yii源码解读-服务定位器(Service Locator)
  • JAVA-JSP之include指令
  • xml 与dto的相互转换
  • ubuntu下安装cx_oracle
  • Android ViewPager使用详解
  • lateral view
  • Spring 一二事(10) - annotation AOP
  • ServiceStack.OrmLite MVC搭建
  • JDBCTemplate
  • 20160323实盘短线操作
  • JavaScript-如何实现克隆(clone)函数
  • $translatePartialLoader加载失败及解决方式
  • Logstash 参考指南(目录)
  • Magento 1.x 中文订单打印乱码
  • nginx 配置多 域名 + 多 https
  • node.js
  • NSTimer学习笔记
  • Twitter赢在开放,三年创造奇迹
  • 大整数乘法-表格法
  • 代理模式
  • 工程优化暨babel升级小记
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 如何合理的规划jvm性能调优
  • 数组大概知多少
  • Hibernate主键生成策略及选择
  • 阿里云ACE认证之理解CDN技术
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (04)odoo视图操作
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (八)Flask之app.route装饰器函数的参数
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (转)socket Aio demo
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转载)hibernate缓存
  • ../depcomp: line 571: exec: g++: not found
  • .axf 转化 .bin文件 的方法
  • .net 4.0发布后不能正常显示图片问题
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net Signalr 使用笔记
  • .NET 常见的偏门问题
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .net程序集学习心得