RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
登录成功-修改登录相关信息-通过事件监听方式完成-实现方式一

1.自定义事件

创新互联建站致力于互联网品牌建设与网络营销,包括网站制作、网站设计、SEO优化、网络推广、整站优化营销策划推广、电子商务、移动互联网营销等。创新互联建站为不同类型的客户提供良好的互联网应用定制及解决方案,创新互联建站核心团队10年专注互联网开发,积累了丰富的网站经验,为广大企业客户提供一站式企业网站建设服务,在网站建设行业内树立了良好口碑。

a.创建包event

b.创建类LoginSuccessEvent

c.编写类的内容

package com.huinongtx.power.consumer.event;

import com.huinongtx.power.consumer.request.account.LoginForm;

import com.huinongtx.power.consumer.vo.result.ResultVO;

import com.huinongtx.power.provider.dto.account.AccountDTO;

import lombok.Data;

import org.springframework.context.ApplicationEvent;

/**

 * @ClassName LoginSuccessEvent

 * @Description 登录成功事件

 * @Author yunshuodeng

 * @Date 2019-04-25 10:43

 * @Version 1.0

 **/

@Data

public class LoginSuccessEvent extends ApplicationEvent {

    private ResultVO resultVO;

    private AccountDTO accountDTO;

    private LoginForm loginForm;

    public LoginSuccessEvent(Object source) {

        super(source);

    }

    public LoginSuccessEvent(Object source,ResultVO resultVO,AccountDTO accountDTO,LoginForm loginForm) {

        super(source);

        this.resultVO = resultVO;

        this.accountDTO = accountDTO;

        this.loginForm = loginForm;

    }

}

2.自定义监听

a.创建包listener

b.创建类LoginSuccessListener

c.编写类的实现

package com.huinongtx.power.consumer.listener;

import com.huinongtx.power.consumer.event.LoginSuccessEvent;

import com.huinongtx.power.consumer.repository.AccountRepository;

import com.huinongtx.power.consumer.request.account.LoginForm;

import com.huinongtx.power.consumer.util.IpUtil;

import com.huinongtx.power.provider.dto.account.AccountDTO;

import com.huinongtx.power.provider.dto.account.ModifyAccountLoginInfoDTO;

import com.huinongtx.power.provider.dto.result.ResultDTO;

import com.huinongtx.power.provider.util.TimeUtil;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.ApplicationListener;

import org.springframework.scheduling.annotation.Async;

import org.springframework.stereotype.Component;

import org.springframework.util.StringUtils;

import javax.servlet.http.HttpServletRequest;

/**

 * @ClassName LoginSuccessListener

 * @Description TODO

 * @Author yunshuodeng

 * @Date 2019-04-25 10:49

 * @Version 1.0

 **/

@Async

@Component

public class LoginSuccessListener implements ApplicationListener {

    @Autowired

    private HttpServletRequest request;

    // 注入账户持久层

    @Autowired

    private AccountRepository accountRepository;

    public void onApplicationEvent(LoginSuccessEvent loginSuccessEvent) {

        if (loginSuccessEvent.getResultVO().getCode() == 0){

//            System.out.println("执行修改登录信息操作");

            // 修改登录相关信息

            try {

                modifyLoginInfo(request,loginSuccessEvent.getAccountDTO(),loginSuccessEvent.getLoginForm());

            } catch (Exception e) {

                System.out.println(e.getMessage());

            }

        }

    }

    /**

     * 修改登录信息

     * @param request

     * @param accountDTO

     * @param loginForm

     * @throws Exception

     */

    private void modifyLoginInfo(HttpServletRequest request, AccountDTO accountDTO, LoginForm loginForm) throws Exception {

        // 获取客户端登录IP

        String ip = IpUtil.getIpAddr(request);

        // 修改登录相关信息

        ModifyAccountLoginInfoDTO modifyAccountLoginInfoDTO = new ModifyAccountLoginInfoDTO();

        modifyAccountLoginInfoDTO.setId(accountDTO.getId());

        modifyAccountLoginInfoDTO.setDeviceNo(loginForm.getDeviceNo());

        modifyAccountLoginInfoDTO.setPlatform(loginForm.getPlatform());

        modifyAccountLoginInfoDTO.setDevicePlatform(loginForm.getDevicePlatform());

        modifyAccountLoginInfoDTO.setLoginTime(TimeUtil.getCurrentTimeMillis());

        modifyAccountLoginInfoDTO.setLastLoginTime(TimeUtil.getCurrentTimeMillis());

        modifyAccountLoginInfoDTO.setIp(ip);

        Long count = StringUtils.isEmpty(accountDTO.getCount()) ? 0 : accountDTO.getCount();

        modifyAccountLoginInfoDTO.setCount(count+1);

        ResultDTO resultDTO = accountRepository.modifyAccountInfoByCondition(modifyAccountLoginInfoDTO);

        System.out.println(resultDTO.getState());

    }

}

3.发布事件

a.在service中注入spring 上下文

@Autowired

private ApplicationContext applicationContext;

b.在相应的业务方法中发布事件

// 代码省略

// 发布事件

applicationContext.publishEvent(new LoginSuccessEvent(this,resultVO,accountDTO,loginForm));

// 代码省略


标题名称:登录成功-修改登录相关信息-通过事件监听方式完成-实现方式一
文章路径:http://scyingshan.cn/article/geosde.html