SpringBoot2.X 使用ActiveMQ实战项目之实现登陆日志保存

1.生成一个登陆日志消息发送者

import com.yhy.sys.domain.Loginfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component;

import javax.jms.Queue;

/**
 * 登陆日志消息发送者
 */
@Component
public class LoginfoSender {

    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;

    @Autowired
    private Queue queue;

    public void sendMessage(Loginfo loginfo) {
        jmsMessagingTemplate.convertAndSend(queue, loginfo);

    }
}

2.生成登陆日志消息处理者

import com.yhy.sys.domain.Loginfo;
import com.yhy.sys.service.LoginfoService;
import org.apache.activemq.command.ActiveMQObjectMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

import javax.jms.JMSException;
import javax.jms.Message;

/**
 * 登陆日志消息处理者
 */
@Component
public class LoginfoReceiver {

    @Autowired
    private LoginfoService loginfoService;

    @JmsListener(destination = "login-info",containerFactory = "myFactory")
    public void handle(Message message) {
        if (message instanceof ActiveMQObjectMessage) {
            ActiveMQObjectMessage activeMQObjectMessage = (ActiveMQObjectMessage) message;
            try {
                Loginfo loginfo = (Loginfo) activeMQObjectMessage.getObject();
                loginfoService.save(loginfo);
                //手动确认消息,才不会出现bug也被消费
                activeMQObjectMessage.acknowledge();
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
    }
}

3.配置

import com.yhy.sys.domain.QueueEnum;
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.jms.Queue;

@Configuration
public class ActiveMQConfig {

    @Bean
    public Queue queue() {
        return new ActiveMQQueue(QueueEnum.QUEUE_LOGINFO.getName());
    }


    @Bean
    public DefaultJmsListenerContainerFactory myFactory(ConnectionFactory connectionFactory, DefaultJmsListenerContainerFactoryConfigurer configurer) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        configurer.configure(factory, connectionFactory);
        factory.setSessionTransacted(false);
        factory.setSessionAcknowledgeMode(4);
        return factory;
    }
}

4.登录时,保存日志

    @RequestMapping("/login")
    public ResultObj login(String loginname, String pwd) {
        Subject subject = SecurityUtils.getSubject();
        UsernamePasswordToken token = new UsernamePasswordToken(loginname, pwd);
        try {
            subject.login(token);
            ActiverUser activerUser = (ActiverUser) subject.getPrincipal();
            WebUtils.getSession().setAttribute("user", activerUser.getUser());
            
            //登录日志对象生成
            Loginfo loginfo = new Loginfo();
            loginfo.setLoginname(activerUser.getUser().getLoginname());
            loginfo.setLoginip(WebUtils.getRequest().getRemoteAddr());
            loginfo.setLogintime(new Date());
            //使用mq保存登陆日志
            loginfoSender.sendMessage(loginfo);
            //使用mq之前的方式
            //loginfoService.save(loginfo);
            return ResultObj.LOGIN_SUCCESS;
        } catch (AuthenticationException e) {
            e.printStackTrace();
            return ResultObj.LOGIN_ERROR_PASS;
        }

    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值