mirror of
https://gitee.com/beecue/fastbee.git
synced 2026-05-07 00:04:41 +08:00
feat(国际化): 新增国际化
This commit is contained in:
@@ -70,6 +70,22 @@
|
||||
<version>${dynamic-datasource.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.mapstruct</groupId>
|
||||
<artifactId>mapstruct</artifactId> <!-- use mapstruct-jdk8 for Java 8 or higher -->
|
||||
<version>${mapstruct.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mapstruct</groupId>
|
||||
<artifactId>mapstruct-jdk8</artifactId>
|
||||
<version>${mapstruct.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mapstruct</groupId>
|
||||
<artifactId>mapstruct-processor</artifactId>
|
||||
<version>${mapstruct.version}</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.fastbee.framework.config;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.fastbee.framework.interceptor.LanguageInterceptor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
@@ -15,6 +17,8 @@ import com.fastbee.common.config.RuoYiConfig;
|
||||
import com.fastbee.common.constant.Constants;
|
||||
import com.fastbee.framework.interceptor.RepeatSubmitInterceptor;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 通用配置
|
||||
*
|
||||
@@ -25,6 +29,8 @@ public class ResourcesConfig implements WebMvcConfigurer
|
||||
{
|
||||
@Autowired
|
||||
private RepeatSubmitInterceptor repeatSubmitInterceptor;
|
||||
@Resource
|
||||
private LanguageInterceptor languageInterceptor;
|
||||
|
||||
@Override
|
||||
public void addResourceHandlers(ResourceHandlerRegistry registry)
|
||||
@@ -46,6 +52,9 @@ public class ResourcesConfig implements WebMvcConfigurer
|
||||
public void addInterceptors(InterceptorRegistry registry)
|
||||
{
|
||||
registry.addInterceptor(repeatSubmitInterceptor).addPathPatterns("/**");
|
||||
//这里配置国际化拦截器的白名单
|
||||
registry.addInterceptor(languageInterceptor).addPathPatterns("/**").excludePathPatterns("/v2/api-docs",
|
||||
"/tool/gen/**");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -119,6 +119,7 @@ public class SecurityConfig
|
||||
"/wechat/mobileLogin", "/wechat/miniLogin", "/wechat/wxBind/callback").permitAll()
|
||||
.antMatchers("/zlmhook/**").permitAll()
|
||||
.antMatchers("/goview/sys/login","/goview/project/getData").permitAll()
|
||||
.antMatchers("/app/language/list").permitAll()
|
||||
// 静态资源,可匿名访问
|
||||
.antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
|
||||
.antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/druid/**").permitAll()
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
package com.fastbee.framework.interceptor;
|
||||
|
||||
import com.fastbee.common.enums.Language;
|
||||
import com.fastbee.common.utils.SecurityUtils;
|
||||
import com.fastbee.common.utils.StringUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.i18n.LocaleContextHolder;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.Locale;
|
||||
|
||||
import static com.fastbee.common.constant.Constants.LANGUAGE;
|
||||
|
||||
|
||||
/**
|
||||
* 国际化语言拦截器
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
public class LanguageInterceptor implements HandlerInterceptor {
|
||||
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||
String language = request.getHeader(LANGUAGE);
|
||||
if (StringUtils.isEmpty(language) || language.equals("undefined")
|
||||
|| language.equals("")|| language.equals("null")){
|
||||
//针对有些接口没有增加语言字段,先去token获取
|
||||
language = SecurityUtils.getLanguage();
|
||||
}else if (!language.contains("-")){
|
||||
language = Language.matches(language);
|
||||
}
|
||||
// 前端传递的language必须是zh-CN格式的,中间的-必须要完整,不能只传递zh或en
|
||||
Locale locale = new Locale(language.split("-")[0],language.split("-")[1]);
|
||||
// 这样赋值以后,MessageUtils.message方法就不用修改了
|
||||
LocaleContextHolder.setLocale(locale);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
|
||||
*/
|
||||
@Override
|
||||
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
|
||||
}
|
||||
|
||||
/**
|
||||
* 在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)
|
||||
*/
|
||||
@Override
|
||||
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -66,7 +66,7 @@ public class SysLoginService
|
||||
* @param uuid 唯一标识
|
||||
* @return 结果
|
||||
*/
|
||||
public String login(String username, String password, String code, String uuid)
|
||||
public String login(String username, String password, String code, String uuid, String language)
|
||||
{
|
||||
// 验证码校验
|
||||
validateCaptcha(username, code, uuid);
|
||||
@@ -100,6 +100,7 @@ public class SysLoginService
|
||||
}
|
||||
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
|
||||
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
|
||||
loginUser.setLanguage(language);
|
||||
recordLoginInfo(loginUser.getUserId());
|
||||
// 生成token
|
||||
return tokenService.createToken(loginUser);
|
||||
@@ -111,7 +112,7 @@ public class SysLoginService
|
||||
* @param password 密码
|
||||
* @return token
|
||||
*/
|
||||
public String socialLogin(String username, String password){
|
||||
public String socialLogin(String username, String password, String language){
|
||||
// 用户验证
|
||||
Authentication authentication = null;
|
||||
try
|
||||
@@ -136,6 +137,7 @@ public class SysLoginService
|
||||
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
|
||||
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
|
||||
recordLoginInfo(loginUser.getUserId());
|
||||
loginUser.setLanguage(language);
|
||||
// 生成token
|
||||
return tokenService.createToken(loginUser);
|
||||
}
|
||||
@@ -146,7 +148,7 @@ public class SysLoginService
|
||||
* @param encodePwd 系统用户密码
|
||||
* @return
|
||||
*/
|
||||
public String redirectLogin(String username,String encodePwd){
|
||||
public String redirectLogin(String username,String encodePwd,String language){
|
||||
// UserDetails userDetails=userDetailsServiceImpl.loadUserByUsername(username);
|
||||
SysUser user = userService.selectUserByUserName(username);
|
||||
if (StringUtils.isNull(user))
|
||||
@@ -167,6 +169,8 @@ public class SysLoginService
|
||||
UserDetails userDetails = userDetailsServiceImpl.createLoginUser(user);
|
||||
LoginUser loginUser = (LoginUser) userDetails;
|
||||
recordLoginInfo(loginUser.getUserId());
|
||||
loginUser.setLanguage(language);
|
||||
|
||||
// 生成token
|
||||
return tokenService.createToken(loginUser);
|
||||
|
||||
|
||||
@@ -61,6 +61,6 @@ public class UserDetailsServiceImpl implements UserDetailsService
|
||||
|
||||
public UserDetails createLoginUser(SysUser user)
|
||||
{
|
||||
return new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user));
|
||||
return new LoginUser(user.getUserId(), user.getDeptId(), user.getLanguage(), user, permissionService.getMenuPermission(user));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user