Springboot快速入门(四)——Web开发:国际化/登录/注销
2022-09-23 11:07:27
1. 页面国际化
1.1 配置文件编写
resources资源文件下新建一个i18n目录,存放国际化配置文件
建立一个login.properties文件,一个login_zh_CN.properties,还有一个login_en_US.properties;
编写配置
login.properties : 默认
1
2
3
4
5login.btn=登录
login.password=密码
login.remember=记住我
login.tip=请登录
login.username=用户名英文
1
2
3
4
5login.btn=Sign in
login.password=Password
login.remember=Remember me
login.tip=Please sign in
login.username=Username中文
1
2
3
4
5login.btn=登录
login.password=密码
login.remember=记住我
login.tip=请登录
login.username=用户名
配置页面国际化值
1.2 配置生效
点击链接让个人的国际化资源生效,就需要让我们自己的Locale生效! 需要去自己写一个自己的LocaleResolver,可以在链接上携带区域信息
修改前端页面的跳转
1
2
3<!-- 这里传入参数不需要使用 ? 使用 (key=value)-->
<a class="btn btn-sm" th:href="@{/index.html(l='zh_CN')}">中文</a>
<a class="btn btn-sm" th:href="@{/index.html(l='en_US')}">English</a>写一个处理的组件类(在config文件夹下)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22/**
* 可以在链接上携带区域信息
*/
public class MyLocaleResolver implements LocaleResolver {
// 解析请求
public Locale resolveLocale(HttpServletRequest request) {
String language = request.getParameter("l");
Locale locale = Locale.getDefault(); // 如果没有获取到就使用系统默认的
// 如果请求链接不为空
if (!StringUtils.isEmpty(language)) {
// 分割请求参数
String[] split = language.split("_");
// 国家,地区
locale = new Locale(split[0], split[1]);
}
return locale;
}
public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
}
}为了让区域化信息能够生效,需要再配置一下这个组件!在个人的MvcConofig下添加 bean;(在MyMvcConfig中)
1
2
3
4
public LocaleResolver localeResolver(){
return new MyLocaleResolver();
}
2. 登录功能实现
2.1 登录
登录的html页面提交地址,并且所有的表单标签都需要加上一个name属性
1
2
3
4<form class="form-signin" th:action="@{/user/login}" method="post">
</form>
·············编写LoginController
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class LoginController {
public String login( String username,
String password,
Model model, HttpSession session){
if (!StringUtils.isEmpty(username) && "123456".equals(password)){
// 登录成功!将用户信息放入session
session.setAttribute("loginUser",username);
return "dashboard"; // 跳转到首页
}else {
// 登录失败!存放错误信息
model.addAttribute("msg","用户名密码错误");
return "index";
}
}
}登录失败的话,需要将后台信息输出到前台,可以在首页标题下面加上判断!
1
2
3<!--判断是否显示,使用if, ${}可以使用工具类,可以看thymeleaf的中文文档-->
<p style="color: red" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}">
</p>登录成功后,由于是转发,链接不变,可以重定向到首页
再添加一个视图控制映射,在自己的MyMvcConfig中:
1
registry.addViewController("/main.html").setViewName("dashboard");
将 LoginController 的代码改为重定向
1
2//登录成功!防止表单重复提交,我们重定向
return "redirect:/main.html";
2.2 登录拦截器
自定义拦截器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16public class LoginHandlerInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//获取loginUser信息进行判断
Object user = request.getSession().getAttribute("loginUser");
if(user==null){
//未登录,返回首页
request.setAttribute("msg","没有权限,请登录账户");
request.getRequestDispatcher("/index.html").forward(request,response);
return false;
}else{
//登录,放行
return true;
}
}
}将拦截器注册到SpringMVC配置类当中——MyMVCConfig.java
1
2
3
4
5
6
7
8
public void addInterceptors(InterceptorRegistry registry) {
// 注册拦截器,及拦截请求和要剔除哪些请求!
// 还需要过滤静态资源文件,否则样式显示不出来
registry.addInterceptor(new LoginHandlerInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/index.html","/","/user/login","/static/**");
}
3 注销页面
3.1 修改前端界面
在提取出来的公共
commons
页面,顶部导航栏处的标签添加href
属性,实现点击发起请求user/logOut
1 | <a class="nav-link" href="#" th:href="@{/user/loginOut}">Sign out</a> |
3.2 修改后端界面
LoginController.java文件
处理点击
注销
标签的请求,在LoginController
中编写对应的方法,清除session,并重定向到首页
1 |
|