spring Security的自定义用户认证过程详解

 更新时间:2019年09月29日 14:57:19   作者:King-D  
这篇文章主要介绍了spring Security的自定义用户认证过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

首先我需要在xml文件中声明.我要进行自定义用户的认证类,也就是我要自己从数据库中进行查询

<http pattern="/*.html" security="none"/>
  <http pattern="/css/**" security="none"/>
  <http pattern="/img/**" security="none"/>
  <http pattern="/js/**" security="none"/>
  <http pattern="/plugins/**" security="none"/>
  <http pattern="/seller/add.do" security="none"/>

  <!-- use-expressions:设置是否启动SpEL表达式,默认值是true。 -->
  <http use-expressions="false">
    <!--
      配置SpringSecurity的拦截路径(拦截规则)
      * pattern:配置拦截规则。  /* 代表的是根路径下的所有资源(不包含子路径) /**代表的是根路径下所有的资源(包含子路径)
      * access:设置角色 角色命名 ROLE_角色名称 如: ROLE_USER
    -->
    <intercept-url pattern="/**" access="ROLE_SELLER"/>

    <!--
    开启表单验证
      username-parameter="username"
      password-parameter="password"
      login-page      :登录页面名称 以 / 开始
      default-target-url  :登录成功后跳转的页面
      login-processing-url:提交的路径的设置 默认值"/login" 可以修改
    -->
    <form-login login-page="/shoplogin.html" default-target-url="/admin/index.html" always-use-default-target="true" authentication-failure-url="/shoplogin.html"/>

    <!-- 不使用csrf的校验 -->
    <csrf disabled="true"/>

    <!-- 配置框架页面不拦截 -->
    <headers>
      <frame-options policy="SAMEORIGIN"/>
    </headers>

    <!-- 注销的配置 -->
    <logout logout-url="/logout" logout-success-url="/shoplogin.html" />
  </http>

  <!-- 配置认证管理器 -->
  <authentication-manager>
    <!-- 认证的提供者 -->
    <authentication-provider user-service-ref="userDetailService">
      <password-encoder ref="passwordEncoder"></password-encoder>
    </authentication-provider>
  </authentication-manager>
<!-- 配置自定义的认证类 -->
  <beans:bean id="userDetailService" class="com.qingmu2.core.service.UserDetailServiceImpl">
    <beans:property name="sellerService" ref="sellerService"></beans:property>
  </beans:bean>

<!--加密时候使用的算法是BCryptPasswordEncoder-->
  <beans:bean id="passwordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>

配置完自定义的文件以后,在需要自定义认证类的模块中实现

UserDetailsService

package com.qingmu2.core.service;
import com.alibaba.dubbo.config.annotation.Reference;
import com.qingmu2.core.pojo.seller.Seller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;

/**
 * 自定义的认证类
 * @Auther:qingmu
 * @Description:脚踏实地,只为出人头地
 * @Date:Created in 8:33 2019/5/31
 */
public class UserDetailServiceImpl implements UserDetailsService {

  private SellerService sellerService;

  public UserDetailServiceImpl() {
  }
  @Override
  public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    Seller seller = sellerService.findOne(username);
    if(null!=seller){
      //判断一次商家是否被审核通过.
      if("1".equals(seller.getStatus())){
        //创建一个集合,用来存储权限
        HashSet<GrantedAuthority> authorities = new HashSet<>();
        authorities.add(new SimpleGrantedAuthority("ROLE_SELLER"));
        //将这个用户的信息返回给认证类
        return new User(username,seller.getPassword(),authorities);
      }
    }
    //没有这个用户,则返回null
    return null;
  }

  public UserDetailServiceImpl(SellerService sellerService) {
    this.sellerService = sellerService;
  }

  public SellerService getSellerService() {
    return sellerService;
  }

  public void setSellerService(SellerService sellerService) {
    this.sellerService = sellerService;
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java 中的语法糖,真甜

    Java 中的语法糖,真甜

    语法糖(Syntactic sugar),也叫做糖衣语法,是英国科学家发明的一个术语,通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会.这篇文章主要介绍了Java 中的语法糖知识,需要的朋友可以参考下
    2020-12-12
  • 读取spring配置文件的方法(spring读取资源文件)

    读取spring配置文件的方法(spring读取资源文件)

    这篇文章主要介绍了读取spring配置文件的方法,需要的朋友可以参考下
    2014-02-02
  • Java中的序列化(Serializable)和反序列化

    Java中的序列化(Serializable)和反序列化

    这篇文章主要介绍了Java中的序列化(Serializable)和反序列化, JAVA序列化与反序列化就是JAVA对象与一串字节流之间的相互转换, 我们在程序中创建的JAVA对象只存在于JVM中,需要的朋友可以参考下
    2023-09-09
  • PostMan传@RequestParam修饰的数组方式

    PostMan传@RequestParam修饰的数组方式

    这篇文章主要介绍了PostMan传@RequestParam修饰的数组方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • java使用归并删除法删除二叉树中节点的方法

    java使用归并删除法删除二叉树中节点的方法

    这篇文章主要介绍了java使用归并删除法删除二叉树中节点的方法,实例分析了java二叉树算法的相关操作技巧,需要的朋友可以参考下
    2015-05-05
  • 讲解Java中的基础类库和语言包的使用

    讲解Java中的基础类库和语言包的使用

    这篇文章主要介绍了Java中的基础类库和语言包的使用,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • Spring Boot使用Allatori代码混淆的方法

    Spring Boot使用Allatori代码混淆的方法

    这篇文章主要介绍了Spring Boot使用Allatori代码混淆的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Java实现将CSV转为Excel的示例代码

    Java实现将CSV转为Excel的示例代码

    CSV(Comma Separated Values)文件是一种纯文本文件,包含用逗号分隔的数据,常用于将数据从一个应用程序导入或导出到另一个应用程序。本文将利用Java实现CSV转为Excel,感兴趣的可以了解一下
    2022-03-03
  • Java如何获取Date的“昨天”与“明天”示例代码

    Java如何获取Date的“昨天”与“明天”示例代码

    最近在做项目的时候用到Date和Calendar比较多,而且用到的方式也比较全,突然想到一个问题,Java如何获取Date的"昨天"与"明天",也就是前一天和后一天呢?思考后写出了方法,想着万一以后用到,就总结出来,也方便有需要的朋友们参考借鉴,下面来一起看看吧。
    2016-12-12
  • Spring mvc工作原理_动力节点Java学院整理

    Spring mvc工作原理_动力节点Java学院整理

    这篇文章主要为大家详细介绍了Spring mvc工作原理的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08

最新评论