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

 更新时间:2018年04月03日 10:22:09   作者:玩具熊猫  
这篇文章主要介绍了基于SpringBoot实现的用户身份验证工具,非常不错,具有参考借鉴价值 ,需要的朋友可以参考下

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实现用户身份验证工具,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • JDK8配置环境变量的bat文件的详细教程

    JDK8配置环境变量的bat文件的详细教程

    这篇文章主要介绍了JDK8配置环境变量的bat文件,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • mybatis创建项目报Invalid bound statement (not found)错误解决方法

    mybatis创建项目报Invalid bound statement (not found)错误解决方法

    使用MyBatis能够帮助我们将SQL语句和Java代码分离,这篇文章主要给大家介绍了关于mybatis创建项目报Invalid bound statement (not found)错误的解决方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • 解决线程池中ThreadGroup的坑

    解决线程池中ThreadGroup的坑

    这篇文章主要介绍了解决线程池中ThreadGroup的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • SpringBoot定时任务不执行的几个可能原因及解决方法

    SpringBoot定时任务不执行的几个可能原因及解决方法

    这篇文章主要介绍了SpringBoot定时任务不执行的几个可能原因及解决方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-12-12
  • java对象数组实现学生信息管理系统

    java对象数组实现学生信息管理系统

    这篇文章主要为大家详细介绍了java对象数组实现学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Java日常练习题,每天进步一点点(5)

    Java日常练习题,每天进步一点点(5)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • Java使用Callable和Future创建线程操作示例

    Java使用Callable和Future创建线程操作示例

    这篇文章主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项,需要的朋友可以参考下
    2019-09-09
  • Java中IO流解析及代码实例详解

    Java中IO流解析及代码实例详解

    流是一种抽象概念,它代表了数据的无结构化传递。。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出
    2021-08-08
  • Java语言资源国际化步骤解析

    Java语言资源国际化步骤解析

    这篇文章主要介绍了Java语言资源国际化步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Spring Boot接口支持高并发具体实现代码

    Spring Boot接口支持高并发具体实现代码

    这篇文章主要给大家介绍了关于Spring Boot接口支持高并发具体实现的相关资料,在SpringBoot项目中通常我们没有处理并发问题,但是使用项目本身还是支持一定的并发量,需要的朋友可以参考下
    2023-08-08

最新评论