Log login and logout action.

pull/235/head
ruibaby 2019-06-25 15:37:28 +08:00
parent b3122184e1
commit 7f7710ed67
4 changed files with 34 additions and 42 deletions

View File

@ -1,36 +0,0 @@
package run.halo.app.model.support;
/**
* <pre>
*
* </pre>
*
* @author ryanwang
* @date : 2018/1/19
*/
public interface LogsRecord {
String INSTALL = "初始化博客";
String LOGIN = "登录后台";
String LOGIN_SUCCESS = "登录成功";
String LOGIN_ERROR = "登录失败";
String LOGOUT = "退出登录";
String PUSH_POST = "发表文章";
String PUSH_PAGE = "发表页面";
String REMOVE_POST = "删除文章";
String CHANGE_THEME = "更换主题";
String UPLOAD_THEME = "上传主题";
String UPLOAD_FILE = "上传附件";
String REMOVE_FILE = "移除附件";
}

View File

@ -17,6 +17,7 @@ public class QiNiuPutSet {
* hash
*/
public String hash;
/**
*
*/

View File

@ -3,6 +3,7 @@ package run.halo.app.service.impl;
import cn.hutool.core.lang.Validator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.http.ResponseEntity;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Service;
@ -10,6 +11,7 @@ import org.springframework.util.Assert;
import org.springframework.web.client.RestTemplate;
import run.halo.app.cache.StringCacheStore;
import run.halo.app.config.properties.HaloProperties;
import run.halo.app.event.logger.LogEvent;
import run.halo.app.exception.BadRequestException;
import run.halo.app.exception.NotFoundException;
import run.halo.app.exception.ServiceException;
@ -17,6 +19,7 @@ import run.halo.app.model.dto.EnvironmentDTO;
import run.halo.app.model.dto.StatisticDTO;
import run.halo.app.model.entity.User;
import run.halo.app.model.enums.CommentStatus;
import run.halo.app.model.enums.LogType;
import run.halo.app.model.enums.Mode;
import run.halo.app.model.enums.PostStatus;
import run.halo.app.model.params.LoginParam;
@ -76,6 +79,8 @@ public class AdminServiceImpl implements AdminService {
private final HaloProperties haloProperties;
private final ApplicationEventPublisher eventPublisher;
private final String driverClassName;
private final String mode;
@ -92,6 +97,7 @@ public class AdminServiceImpl implements AdminService {
StringCacheStore cacheStore,
RestTemplate restTemplate,
HaloProperties haloProperties,
ApplicationEventPublisher eventPublisher,
@Value("${spring.datasource.driver-class-name}") String driverClassName,
@Value("${spring.profiles.active:prod}") String mode) {
this.postService = postService;
@ -106,6 +112,7 @@ public class AdminServiceImpl implements AdminService {
this.cacheStore = cacheStore;
this.restTemplate = restTemplate;
this.haloProperties = haloProperties;
this.eventPublisher = eventPublisher;
this.driverClassName = driverClassName;
this.mode = mode;
}
@ -126,6 +133,8 @@ public class AdminServiceImpl implements AdminService {
userService.getByEmailOfNonNull(username) : userService.getByUsernameOfNonNull(username);
} catch (NotFoundException e) {
log.error("Failed to find user by name: " + username, e);
eventPublisher.publishEvent(new LogEvent(this, "", LogType.LOGIN_FAILED, loginParam.getUsername()));
throw new BadRequestException(mismatchTip);
}
@ -133,6 +142,8 @@ public class AdminServiceImpl implements AdminService {
if (!userService.passwordMatch(user, loginParam.getPassword())) {
// If the password is mismatch
eventPublisher.publishEvent(new LogEvent(this, "", LogType.LOGIN_FAILED, loginParam.getUsername()));
throw new BadRequestException(mismatchTip);
}
@ -141,6 +152,9 @@ public class AdminServiceImpl implements AdminService {
throw new BadRequestException("您已登录,请不要重复登录");
}
// Log it then login successful
eventPublisher.publishEvent(new LogEvent(this, user.getUsername(), LogType.LOGGED_IN, user.getNickname()));
// Generate new token
return buildAuthToken(user);
}
@ -170,6 +184,8 @@ public class AdminServiceImpl implements AdminService {
cacheStore.delete(SecurityUtils.buildRefreshTokenKey(user));
});
eventPublisher.publishEvent(new LogEvent(this, user.getUsername(), LogType.LOGGED_OUT, user.getNickname()));
log.info("You have been logged out, looking forward to your next visit!");
}

View File

@ -24,16 +24,16 @@
<#-- 站点验证代码 -->
<#macro verification>
<#if options.seo_verification_google??>
<meta name="google-site-verification" content="${options.seo_verification_google}" />
<meta name="google-site-verification" content="${options.seo_verification_google}"/>
</#if>
<#if options.seo_verification_bing??>
<meta name="msvalidate.01" content="${options.seo_verification_bing}" />
<meta name="msvalidate.01" content="${options.seo_verification_bing}"/>
</#if>
<#if options.seo_verification_baidu??>
<meta name="baidu-site-verification" content="${options.seo_verification_baidu}" />
<meta name="baidu-site-verification" content="${options.seo_verification_baidu}"/>
</#if>
<#if options.seo_verification_qihu??>
<meta name="360-site-verification" content="${options.seo_verification_qihu}" />
<meta name="360-site-verification" content="${options.seo_verification_qihu}"/>
</#if>
</#macro>
@ -51,17 +51,28 @@
</#if>
</#macro>
<#-- global head -->
<#macro head>
<#if options.spider_disabled!false>
<meta name="robots" content="none">
<meta name="robots" content="none">
</#if>
<meta name="generator" content="Halo ${version!}" />
<meta name="generator" content="Halo ${version!}"/>
<@custom_head />
<@verification />
<@favicon />
</#macro>
<#-- global footer -->
<#macro footer>
<@footer_info />
<@statistics />
</#macro>
<#-- post comment module -->
<#macro comment post,type>
<#if !post.disallowComment!false>
<script src="//cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.min.js"></script>
<script src="//cdn.jsdelivr.net/gh/halo-dev/halo-comment@1.0.2/dist/halo-comment.min.js"></script>
<halo-comment id="${post.id}" type="${type}"/>
</#if>
</#macro>