基于SpringBoot实现用户身份验证工具

所属分类: 软件编程 / java 阅读数: 23
收藏 0 赞 0 分享

session失效时间

 在Tomcat上,session的默认有效时间是30分钟。也可以通过配置文件修改session的有效时间。

 1)修改web.xml

<!-- 设置session失效,单位分 --> 
<session-config> 
  <session-timeout>1</session-timeout> 
</session-config>

2).yml文件

server.session.cookie.http-only= #是否开启HttpOnly 
server.session.timeout = #会话超时(秒) 

使用过滤器获取session进行身份验证(未全部测试,慎用)

1)新建Filter

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.boot.web.servlet.ServletComponentScan; 
import org.springframework.context.ApplicationContext; 
import org.springframework.stereotype.Component; 
import org.springframework.web.context.support.WebApplicationContextUtils; 
import javax.servlet.*; 
import javax.servlet.annotation.WebFilter; 
import javax.servlet.http.HttpServletRequest; 
import java.io.IOException; 
@Component 
@ServletComponentScan//让@WebFilter起作用 
@WebFilter(urlPatterns = "/*") 
public class MyFilter implements Filter{ 
  @Autowired 
  private SessionKeyConfigProperties sessionKeyConfigProperties; 
  @Override 
  public void init(FilterConfig filterConfig) throws ServletException { 
  } 
  @Override 
  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) 
      throws IOException, ServletException { 
    HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; 
    System.out.println(sessionKeyConfigProperties.getUserTypeKey()); 
    //通过session获取身份信息 
    AuthenticationUtil authenticationUtil = new AuthenticationUtil(sessionKeyConfigProperties); 
    UserTypeEnum userType = authenticationUtil.getUserAuthentication(httpServletRequest.getSession()); 
    //进行认证 
    //认证失败 
    if(userType == null){ 
      //... 
    } 
    //用户不是管理员 
    if(userType != UserTypeEnum.ADMIN){ 
      //... 
    } 
    filterChain.doFilter(servletRequest,servletResponse); 
  } 
  @Override 
  public void destroy() { 
  } 
} 

细心的读者会发现我用了AuthenticationUtil,这是为了将读写用户身份认证信息的功能分离而设计的工具类  2)AuthenticationUtil类

import org.apache.shiro.web.session.HttpServletSession; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpSession; 
public class AuthenticationUtil { 
  private SessionKeyConfigProperties configProperties; 
  public AuthenticationUtil(SessionKeyConfigProperties configProperties) { 
    this.configProperties = configProperties; 
  } 
  /** 
   * 从session中获取用户的身份类型 
   * @param session 
   * @return 身份类型 
   */ 
  public UserTypeEnum getUserAuthentication(HttpSession session){ 
    //获取session中的用户信息记录 
    Object userType = session.getAttribute(configProperties.getUserTypeKey()); 
    //获取session中记录的用户类型 
    if(userType != null && userType instanceof UserTypeEnum) { 
      return (UserTypeEnum)userType; 
    } 
    return null; 
  } 
  /** 
   * 将用户的身份写入session中 
   * @param session 
   * @param userType 
   */ 
  public void setUserAuthentication(HttpSession session,UserTypeEnum userType){ 
    session.setAttribute(configProperties.getUserTypeKey(),userType); 
  } 
} 

3)配置文件SessiionKeyConfig.properties

user_type_key = userTypeKey 

4)配置读取文件SessionKeyConfigProperties.class

import org.springframework.beans.factory.annotation.Value; 
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource; 
import org.springframework.stereotype.Component; 
@Configuration 
@PropertySource("classpath:config/SessiionKeyConfig.properties") 
@Component 
public class SessionKeyConfigProperties { 
  @Value("${user_type_key}") 
  private String userTypeKey; 
  public String getUserTypeKey() { 
    return userTypeKey; 
  } 
  public void setUserTypeKey(String userTypeKey) { 
    this.userTypeKey = userTypeKey; 
  } 
} 

5)Enum类

public enum UserTypeEnum { 
  ADMIN, 
  USER 
} 

注:本文删除了一些package信息及部分import信息。Enum类和配置类的内容请根据项目需求及数据字典自行修改。

以上所述是小编给大家介绍的基于SpringBoot实现用户身份验证工具,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

更多精彩内容其他人还在看

Java基础之反射原理与用法详解

这篇文章主要介绍了Java基础之反射原理与用法,结合实例形式详细分析了java反射的相关概念、原理、使用方法与操作注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

java字符串的截取方法substring()代码解析

这篇文章主要介绍了java字符串的截取方法substring()代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Mybatis一对多关联关系映射实现过程解析

这篇文章主要介绍了Mybatis一对多关联关系映射实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java整数和字符串相互转化实例详解

这篇文章主要介绍了Java整数和字符串相互转化实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Spring Boot 项目设置网站图标的方法

这篇文章主要介绍了Spring Boot 项目设置网站图标的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java多态机制原理特点详解

在本篇文章里小编给大家分享的是关于java多态机制原理特点详解,有需要的朋友们可以跟着学习下。
收藏 0 赞 0 分享

Jmeter如何添加循环控制器

这篇文章主要介绍了Jmeter如何添加循环控制器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java虚拟机创建失败的原因整理

在本篇文章里小编给大家整理了关于创建java虚拟机失败的解决方法和知识点,需要的朋友们可以参考学习下。
收藏 0 赞 0 分享

Java如何把int类型转换成byte

这篇文章主要介绍了Java如何把int类型转换成byte,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

linux中java获取路径的实例代码

在本篇文章里小编给大家整理的是一篇关于linux中java获取路径的实例代码以及相关知识点,有兴趣的朋友们可以学习参考下。
收藏 0 赞 0 分享
查看更多