项目一众筹网07_04_SpringSecurity记住我数据库登录-默认实现创建UserDetailsService类装配UserDetailsService怎么改源码

Posted 平凡加班狗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了项目一众筹网07_04_SpringSecurity记住我数据库登录-默认实现创建UserDetailsService类装配UserDetailsService怎么改源码相关的知识,希望对你有一定的参考价值。

系列文章目录

文章目录

17-实验7-记住我-内存版

第一次登录以后,然后把浏览器关掉,重新打开,这个时候还是访问上一个请求
本来是要重新登录的,但是如果有记住我这个功能,就不需要重新登录了
我们先试试,没做这个功能之前

把浏览器关闭
然后再访问这个地址(http://localhost:8080/pro5-spring-security/main.html),就会发现会直接跳转到登录页面去

下面开始,我们怎么让它记住我呢?
先开启这个功能


用户要自定义选择:勾选了就记住,没勾选就不记住

我们怎么知道用户选了还是没选?
只要name属性是remember-me框架内部就会帮我们处理 实现


测试看看,应该就没有问题了
注意,不能换浏览器,如果换了浏览器会失效
这个原理是根据cookie来设置的


18-实验8-记住我-数据库版

为什么要有这个版本,原因是,上面那个版本是内存版本,
有一个bug,服务器重启的话就会失效(因为缺少了比对信息)
只有存入到数据库里面,才不会受服务器重启的影响
要存到数据库里, 肯定要连数据库
所以我们第一步,要加入连数据库的依赖
把相关的依赖加进来

		<!-- mysql驱动 -->
		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.47</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>4.3.20.RELEASE</version>
		</dependency>


【看源码】把数据库配置这块配一下

	<!-- 配置数据源 -->
	<bean id="dataSource"
		class="com.alibaba.druid.pool.DruidDataSource">
		<property name="username" value="root"></property>
		<property name="password" value="root"></property>
		<property name="url"
			value="jdbc:mysql://localhost:3306/security?useSSL=false"></property>
		<property name="driverClassName"
			value="com.mysql.jdbc.Driver"></property>
	</bean>

	<!-- jdbcTemplate -->
	<bean id="jdbcTemplate"
		class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource"></property>
	</bean>


注意:如果在spring-mvc.xml里面 配置数据源的时候报错,很有可能是pom.xml 依赖没做好,重新整一下依赖
需要建一下 数据库(暂时不建)

装配数据源



注意命名空间,从源码里面复制粘贴一下

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.access.AccessDeniedHandler;
import org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl;


受保护的

我们没办法跟它同一个类,也没办法跟它同一个包,只能是继承这个类
新建一个类去继承它,意思就是“你必须要当它儿子” 你才能用,这就很过分了

这个是源码,我们试试能不能改源码,这样就不用创建数据库了

改源码

建一个,同样的包名,同样的类名
根据源码,在我们的代码下,新建一个包
包下新建一个跟源码一样的类
然后把源码的代码全部拷贝过来
这样就会优先选择我们自己写的代码,而不会去找框架的源码



因为我们这个离得近,类加载器就会优先加载我们的这个类


然后运行程序,这个表就自动建出来了

然后就是持久化的不受服务启动的记住我功能了

慎重改源码,能不改源码,尽量不改,原因是改了之后,就不是框架本身的了,
到时候百度都百度不出来,跟网上都不一样

19-实验9-数据库登录-默认实现介绍

不好用,暂不使用这里略过
所以我们使用下面的方式来做

20-实验9-数据库登录-创建UserDetailsService类

我们知道有一个自定义类是这样的


我们写一个类去实现这个接口
里面只有这么一个方法


实现一下这个接口




创建实体类

其中需要注意的是:get、set方法和无参构造是必须提供的


还需要有个泛型,其实也可以不写
不写,就这样写
因为返回的是List,所以我们可以这样写



因为这个类我们必须要求他在IOC容器里面才可以,所以我们必须要再加一个注解,如下

21-实验9-数据库登录-装配UserDetailsService

其实就是用上上面那个方法

正是因为前面加了注解这里才可以装配进来


测试一下登录看看


假如说是用户不存在则是如下效果:

众筹网 项目里面应用 SpringSecurity——下一篇

以上是关于项目一众筹网07_04_SpringSecurity记住我数据库登录-默认实现创建UserDetailsService类装配UserDetailsService怎么改源码的主要内容,如果未能解决你的问题,请参考以下文章

项目一众筹网01_00此项目是SSM过渡到分布式项目(SpringBootSpringCloud)

项目一众筹网07_03_SpringSecurity退出登录禁用CSRF基于角色或权限访问控制自定义403页面

项目一众筹网04_0_角色维护-分页(全部用Ajax来做_ajax默认为异步,但是也可以设置为同步_异步做分页_js会比较多我们的js写到外部测试接口通不通

项目一众筹网01_04环境搭建_表述层springMvc的搭建快速打开web.xml快捷键@RequestBody和@ResponseBody的区别以及好处

项目一众筹网04_1_角色维护-分页_角色列表的页面搭建__同步异步的探讨实际应用_完美获取前端元素_异步中数据追加的问题_关键词模糊查询功能完成引入外部js文件

项目一众筹网04_2_角色维护新增和更新[ajax异步开发模式]_bootStrap模态框的使用_后端保存的2种方式_