一、登录功能
①数据库中建表user
②实体类User
③UserMapper
package com.example.demo3.mapper;
import com.example.demo3.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Repository
@Mapper
public interface UserMapper {
User login(User user);
}
④UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo3.mapper.UserMapper">
<select id="login" parameterType="com.example.demo3.entity.User" resultType="com.example.demo3.entity.User">
select id,username,userpwd
from user
where username=#{username} and userpwd=#{userpwd}
</select>
</mapper>
⑤UserService
package com.example.demo3.service;
import com.example.demo3.entity.User;
public interface UserService {
User login(User user);
}
⑥UserServiceimpl
package com.example.demo3.service.impl;
import com.example.demo3.entity.User;
import com.example.demo3.mapper.UserMapper;
import com.example.demo3.service.UserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class UserServiceimpl implements UserService {
@Resource
private UserMapper userMapper;
@Override
public User login(User user) {
return userMapper.login(user);
}
}
⑦UserController
package com.example.demo3.controller;
import com.example.demo3.entity.User;
import com.example.demo3.mapper.UserMapper;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@RequestMapping("user")
public class UserController {
@Resource
private UserMapper userMapper;
@RequestMapping("login")
public User login(User user){
return userMapper.login(user);
}
}
⑧login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style type="text/css">
*{
margin: 0px;
padding: 0px;
}
html,body{
width: 100%;
height: 100%;
}
#container{
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
#login_div{
width: 450px;
border: 1px solid white;
border-radius: 10px;
padding: 10px;
}
#login_title{
text-align: center;
font-size: 40px;
color: black;
font-weight: bold;
font-style: italic;
font-family: "楷体";
margin-bottom: 20px;
}
</style>
<script src="jquery-3.3.1.min.js"></script>
<link rel="stylesheet" href="bootstrap-3.4.1/css/bootstrap.min.css">
<link rel="stylesheet" href="bootstrap-3.4.1/css/bootstrap-theme.min.css">
</head>
<body>
<div id="container">
<div id="login_div">
<div id="login_title">
用户登录
</div>
<div id="login_content">
<form id="login_form">
<div class="form-group row">
<label class="col-form-label col-3 text-right">登录名:</label>
<div class="col-8">
<input type="text" name="username" id="username"
placeholder="登录名" class="form-control">
</div>
</div>
<div class="form-group row">
<label class="col-form-label col-3 text-right">密码:</label>
<div class="col-8">
<input type="password" name="userpwd" id="userpwd"
placeholder="登录密码" class="form-control">
</div>
</div>
<div class="form-group row">
<div class="col-11 text-center">
<button class="btn btn-success" type="button"
onclick="doLogin()">登录</button>
<button class="btn btn-success" type="button"
onclick="doRegister()">注册</button>
<button type="button" class="btn btn-link">忘记密码?</button>
</div>
</div>
</form>
</div>
</div>
</div>
<script>
function doLogin() {
var form=jQuery("#login_form").serialize();
jQuery.post("user/login",form,function (rst) {
//js中非空即真
if(rst)
{
//跳转到新闻页面
location.href="news.html";
}else{
alert("登录信息有误!");
}
})
}
</script>
<script>
function doRegister() {
location.href="register.html";
}
</script>
</body>
</html>
效果图
二、登录拦截
使用拦截器,防止使用者直接输入url从而不登录直接跳转到网页中
①com.xxx下创建config目录→创建java类:LoginHandlerInterceptor
②在login.html中设置session
设置session
可以在浏览器中F12查询session
对象的话数据无法取出,所以要把它转换成json
③编写LoginHandlerInterceptor类
package com.example.demo3.config;
import com.example.demo3.entity.User;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
User user = (User)request.getSession().getAttribute("info");
if (user == null){
request.setAttribute("msg","没有权限,请先登录");
//返回登录页面
request.getRequestDispatcher("login.html").forward(request,response);
return false;
} else {
return true;
}
}
}
④MyMvcConfig类。。。没写完
package com.example.demo3.config;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
public class MyMvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/login.html").setViewName("login");
registry.addViewController("/main.html").setViewName("dashboard");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**").//对所有请求进行拦截
excludePathPatterns("/login.html","/","/user/login","/css/**","/js/**","/img/**");
}
}
三、用户权限验证
不同的权限的用户能够看到的信息不同,可以使用Spring aop也可以不用
四、注销
去掉登录时增加的session