springboot整合thymeleaf实现简单的登录功能-单点登录(四)

上篇地址:https://blog.csdn.net/qq_36154832/article/details/90718252

单点登录的系统实现

单点登录的服务端项目结构

1、新建一个Springboot项目,添加依赖同需求端

2、UserController实现登陆跳转

@Controller
public class UserController {
	
    @Autowired    
    private UserService userService; 
    
    @RequestMapping(value = "/loginPage")
	public ModelAndView login(String redirect,ModelAndView mv,HttpServletRequest request) {
    	mv.addObject("redirect", redirect);
    	HttpSession session = request.getSession();
    	session.setAttribute("redirect", redirect);
    	mv.setViewName("loginPage");
		return mv;
	}
    
    @RequestMapping(value="/login")
    @ResponseBody
    public TitResult userLogin(String username, String password,             
    		HttpServletRequest request, HttpServletResponse response,ModelAndView mv) throws ServletException, IOException {
    	TitResult titResult = null ;
		try {
			titResult = userService.userLogin(username, password, request, response);
		} catch (Exception e) {
		}
		if(titResult == null){
			titResult = TitResult.getTitResult(500, "");
		}
		return titResult;
    }    
}

3、UserRepositoryImpl.java 模拟连接数据库检验用户名密码

@Repository
public class UserRepositoryImpl implements UserRepository{

	/**
	* @param username
	* @param password
	* @return
	*/
	@Override
	public User findByUserNameAndPassword(String username, String password) {
		//模拟查询数据库校验用户名密码
		if("user".equals(username) && "123".equals(password)){
			return new User(username, password);
		}
		return null;
	}

}

4、UserService.java 登陆服务如果登陆成功生成token并存入redis,并将user返回

@Service 
@Transactional 
public class UserService {     
	@Autowired    
	private UserRepository userRepository;    
	@Autowired    
	private RedisUtil redisUtil;     
  
	public TitResult userLogin(String username, String password,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		// 判断账号密码是否正确
		User user = userRepository.findByUserNameAndPassword(username,password);         
		if (user == null) {            
			return TitResult.getTitResult(400, "账号名或密码错误");         
		}         
		// 生成token         
		String token = UUID.randomUUID().toString();         
		// 把用户信息写入 redis
		redisUtil.set("REDIS_USER_SESSION:" + token, JsonUtils.objectToJsonStr(user));
		// 设置 session 的过期时间         
		redisUtil.expire("REDIS_USER_SESSION:" + token, 600);
		// 添加写 cookie 的逻辑,cookie 的有效期是关闭浏览器就失效。
		CookieUtils.setCookie(request, response, "USER_TOKEN", token);
		// 返回token         
		return TitResult.success(token);     
		
	}

}

5、实体类和工具类同需求端

6、登陆界面及配置文件

loginPage.html

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8" />
    <title>thymeleaf demo</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<div>
    ID:<input id="username" type="text"/>
    Password:<input id="password" type="password" />
    <button id="submit">登录</button>
</div>
</body>
<script>
    $(function(){
        $('#submit').on('click',function(){
        	var href = window.location.search
        	var params = href.split('=');
        	var url = params[1];
            $.ajax({
                type:'POST',
                url:'./login',
                data:{username:$("#username").val(),password:$("#password").val()},
                dataType:"json",
                success:function(data){
                    if (data.code == 200) {
                        if (url == "") {
                            location.href = "http://localhost:8080";
                        } else {
                            location.href = url;
                        }
                    } else {
                        alert("登录失败,原因是:" + data.msg);
                    }
                }
            })
        })
    })
</script>
</html>

application.properties

server.port=8081
spring.redis.host=127.0.0.1
spring.redis.port=6379  

 

测试效果

1、访问http://localhost:8080/ 自动跳转登陆界面

2、用户名密码输入正确

3、再新建一个登陆需求项目端口号8082,启动项目。打开http://localhost:8080/和http://localhost:8082/都跳转到需要登陆界面

4、在8082那页面输入用户名密码登陆

5、直接访问http://localhost:8080/也自动登陆了

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值