springSecurity安全登陆模块集成

1.在配置文件中添加springSecurity依赖,其中一个是spring-security-web,一个是spring-security-config
2.因为是web文件,在web-app中创建WEB-INF文件夹,在该文件夹中添加web.xml文件,在web.xml中添加监听器和拦截器(监听器中指定了配置信息的位置和配置文件),拦截器中由一个类是springweb提供的过滤器代理类,通过这个过滤器代理类可以找到springSecurity提供的springSecurityFilterChain类,这个监听器就是整个springSecurity的入口
springSecurity安全登陆模块集成_第1张图片
3.在spring文件夹中创建spring-security.xml文件,在该文件中添加不登陆也能访问的信息,指定访问权限,指定用户认证管理器,添加认证的用户
4.测试的时候,出现不限时右边框架中的功能,因为springSecurity进行拦截了,因此,在springSecurity中添加配置信息:在http中添加headers标签,在headers头信息中添加framoptions选项,登陆之后就可以显示框架页了
登陆系统的时候,如果在登陆之前访问的是某个具体的页面,则登陆成功之后将会进入之前访问的具体页面而不是登陆成功页面,这个时候在http标签中的form-login中指定登陆成功跳转页面always-use-default-target










5.在系统中显示当前的登陆的用户信息,在controller层中添加方法,
@RestController
@RequestMapping("/login")
public class LoginController {
@RequestMapping("/name")
public Map name() {
String name=SecurityContextHolder.getContext().getAuthentication().getName();
Map map=new HashMap<>();
map.put(“loginName”, name);
return map;
}
}
在js的service层中,controller中的信息
app.service(“loginService”,function($http){
this.loginName=function(){
return KaTeX parse error: Expected 'EOF', got '}' at position 31: …gin/name.do") }̲ }); 在js的contro…scope,loginService){
$scope.showLoginName=function(){
loginService.loginName().success(
function(response){
$scope.loginName=response.loginName;
}
);
};
});
最后在页面中指定属性,和接收该值的字段

退出登陆的时候,在从新进入系统中的某个页面的时候能够进去,要避免这种情况,在springSecurity配置文件中http标签内添加logout,当用户选择退出的时候将会退出系统,再次访问的时候就要先登陆

第一部分的安全登陆模块是写死的,认证的用户直接写在了springSecurity.xml配置文件中,没有和数据库进行关联,做测试springSecurity功能的时候使用方便,实际上我们要通过数据库的方式进行连接
实现了UserDetailsServer接口,该接口并不是认证的接口,认证工作是springSecurity框架完成的,框架提供这个接口是为了用来加载用户信息的,我们实现这个接口后,将用户信息从(从数据库中获得的账户号密码权限等信息)包装称UserDetails对象返回给框架。UserDeatilsServer接口中的loadUserByName该方法返回一个UserDeatil对象,UserDetails对象包装了框架提供的user对象,用户可以从数据库中获取用户的账号密码权限构造一个user对象,UserDetails处理密码还要带有权限,如果不使用框架进行认证的话,基本的思路是根据前端提交上来的用户名从数据库中查找账号的信息,之后比对密码,再进一步的话添加一个字段判断当前用户是否已经被锁定,springSecurity框架就是把这些信息取出来之后包装成为一个对象交给框架去认证,登陆成功之后不是什么都可以进行访问的,还要根据拥有的权限进行判断能否访问,有权限才能访问特定的资源,springSecurity框架就是这样的,当认证成功之后,会把用户信息和相关的权限都存储再SecurityContex中,当访问一个资源的时候,就把权限拿出来比对,看看是否满足
https://www.cnblogs.com/longfurcat/archive/2018/08/04/9417358.html

你可能感兴趣的:(springSecurity安全登陆模块集成)