spring Security的自定义用户认证
2024-10-07 13:27:57
首先我需要在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;
}
}
最新文章
- echarts在.Net中使用实例(二) 使用ajax动态加载数据
- CentOS6 搭建Git仓库
- CentOS系统下Hadoop 2.4.1集群安装配置(简易版)
- Spark源码系列(四)图解作业生命周期
- JS高级程序设计2nd部分知识要点3
- dll强签名的由来和作用
- css3动画响应式404页面
- Effective Objective-C 2.0之Note.01
- [转] 使用C#开发ActiveX控件
- 一次GC问题定位
- MSP430F149流水灯闪烁以及数码管的显示
- Java探秘之神秘的字符串String(二)
- 有点难度的JS面试题
- oracle xe在centos下的安装(更)
- 文件IO模型
- JavaWeb中过滤器Filter的使用示例
- FileUpload1.PostedFile.FileName 获取的文件名
- SSM事务——事务回滚如何拿到返回值
- 读书笔记,《Java 8实战》,第四章,引入流
- yii---解决post请求出现500错误