Session实现登录(springboot项目)

代码实现

自定义一个拦截器

package com.xl.sessionlogin.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;

public class LoginInterceptor implements HandlerInterceptor {

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		boolean result = false;
		try {
			result = (boolean)request.getSession().getAttribute("pass");
		} catch (Exception e) {
			e.printStackTrace();
		}
		if (result) {
			return true; // 放行
		}
		return false; // 拦截
	}
	
}

注册拦截器

package com.xl.sessionlogin.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import com.xl.sessionlogin.interceptor.LoginInterceptor;

/**
 * 	注册拦截器并添加配置
 * @author Administrator
 *
 */
@Configuration
public class MyConfig implements WebMvcConfigurer {

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(new LoginInterceptor())
				.addPathPatterns("/**") // 拦截所有
				.excludePathPatterns("/login"); //排除该登录地址或添加其他
		
	}
	
	
}

登录接口

package com.xl.sessionlogin.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/login")
public class LoginController {
	
	@RequestMapping("")
	public String login(HttpServletRequest request,String username, String password) {
		String re = "login success.......";
		
		if (validateAccount(username,password)) { //验证通过
			request.getSession().setAttribute("pass", true);
		} else {
			request.getSession().invalidate(); // 作废当前session
			re = "login failed......";
		}
		return re;
	}
	
	/**
	 *  	验证账号
	 * @param username
	 * @param password
	 * @return true:通过, false:不通过
	 */
	private boolean validateAccount(String username, String password) {
		if (username.length() == password.length())
			return true;
		return false;
	}
	
	
}

业务接口,只有成功登录的用户才能访问

package com.xl.sessionlogin.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/homepage")
public class HomepageController {
	
	@RequestMapping("/logic")
	public String busiLogic() {
		
		return "bussiness logic...";
	}
}

测试

启动项目,

直接访问业务接口。由于未登录,请求地址会被拦截,所以预期是不会返回“bussiness logic…”的

在这里插入图片描述

登录

登录失败

在这里插入图片描述
访问业务接口,因为登录失败,肯定是无法访问的

在这里插入图片描述

登录成功

在这里插入图片描述
访问业务接口,预期会返回字符串“bussiness logic…”
在这里插入图片描述

注:以上只是利用了拦截器和session实现了最简单、最基本的功能,具体的业务根据实际情况进行添加、修改

附:

关于session

服务器可以为每个用户浏览器创建一个会话对象(session对象),一个浏览器只能产生一个session,当新建一个窗口访问服务器时,还是原来的那个session。session中默认保存的是当前用户的信息。因此,在需要保存其他用户数据时,我们可以自己给session添加属性。session(会话)可以看为是一种标识,通过带session的请求,可以让服务器知道是谁在请求数据。

参考:https://blog.csdn.net/qq_29025955/article/details/126452582

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot项目中,session的过期时间可以通过配置文件进行设置。具体来说,可以在application.properties或application.yml中添加如下配置: 1. 在application.properties中添加: ``` server.servlet.session.timeout=30m ``` 这里的30m表示session的过期时间为30分钟。 2. 在application.yml中添加: ``` server: servlet: session: timeout: 30m ``` 这样配置后,session的过期时间将被设置为30分钟。当用户在一段时间内没有与服务器进行交互时,session将会过期,并且需要重新登录。 另外,还可以通过设置session的过期策略来自定义session的过期时间。可以通过实现`HttpSessionListener`接口,并在`sessionCreated`方法中设置过期时间。具体实现如下: ```java import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class SessionListener implements HttpSessionListener { @Override public void sessionCreated(HttpSessionEvent event) { event.getSession().setMaxInactiveInterval(1800); // 设置过期时间为30分钟 } @Override public void sessionDestroyed(HttpSessionEvent event) { // Session销毁时的操作 } } ``` 然后,在Spring Boot的配置类中注册该监听器: ```java import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SessionConfig { @Bean public ServletListenerRegistrationBean<SessionListener> sessionListener() { ServletListenerRegistrationBean<SessionListener> registrationBean = new ServletListenerRegistrationBean<>(); registrationBean.setListener(new SessionListener()); return registrationBean; } } ``` 通过以上两种方式,可以在Spring Boot项目中设置session的过期时间,并对其进行灵活的控制。请根据具体需求选择合适的方法来解决session过期问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值