从零开始java安全权限框架篇(一):spring security配置登录登出的配置

目录

 

一:安全权限框架的选取

二:功能

三:登录登出

四:代码注释

 1.将登陆交由Spring security完成

  2.前台明文密码加密,与数据库比对

3.关键配置

4.自定义用户异常

5.ajax请求处理陈宫和失败的

6.MD5加密和对象转成json就不用我说了吧

五:记住我功能的原理和实现

1.原理

2.代码

六:验证码功能的实现

七:三次错误密码锁定账户


一:安全权限框架的选取

  目前主流的安全权限框架有:shiro和security以及自定义权限框架。本人在之前都是使用的shiro框架,在一定程度上shiro框架具有简单而又通用的优势。但是这里我为什么启用security框架呢?

  首先从名字可以看出security是spring 家族的一员,具有天然无缝整合spring的优势。在之前本人接触到了springcloud-aouth2中使用了security来控制权限,因此这里我们本章就基于这个security框架。

  这里我们将从以下几个方面来解决spring security涉及到的内容

  (1)登录登出配置

  (2)权限的管理

  (3)记住我的功能

  (4)登录超时

  ...

二:功能

  spring  security中对于登录登出功能的功能包含:

  (1)登录交由security来检测

  (2)权限配置交由sercurity来配置

  (3)存储用户登录的缓存(即在spring容器的上下文中都可以在这里取得当前用户的信息)

 

三:登录登出

                这里主要是3个配置以及主要的作用如下图所示

           

四:代码注释

 1.将登陆交由Spring security完成

   这里基本上没有什么的,结合上图就能看懂

package com.config.Seurity.service;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.apache.tomcat.util.security.MD5Encoder;
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.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;

import com.moudle.user.model.Role;
import com.moudle.user.model.User;
import com.moudle.user.model.UserRole;
import com.moudle.user.service.UserRoleService;
import com.moudle.user.service.UserService;

import commons.utils.Md5Utils;

/*
 * 自定义用户登录授权service
 */
@Service("userDetailsService")
public class LoginService implements  UserDetailsService{
	
	@Autowired
	private UserService  userService;
	
	@Autowired
	private UserRoleService  userroleSerivce;
	
	@Override
	public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
		
		List<User>  userList = userService.login(username, null);
		
		if (userList == null || userList.isEmpty()) {
			throw new UsernameNotFoundException("该用户不存在!");
		}
		
		//添加权限
		UserRole  userRole=new UserRole();
		userRole.setUserId(userList.get(0).getFkUserId());
		List<Role> roleList=userroleSerivce.findUserRoleList(userRole).get(0).getRoleList();
		
		 Collection<GrantedAuthority> authorities = new ArrayList<>();
		for(Role role:roleList) {
			authorities.add(new SimpleGrantedAuthority(role.getRoleCode()));
		}
			
		return new org.springframework.security.core.userdetails.User(userList.get(0).getUserName(),
				userList.get(0).getPassword(), authorities);
	}

}

  2.前台明文密码加密,与数据库比对

     这里也没什么好说的,就是注意前台输入的面加密方式与存入数据库密码的方式,一致

package com.config.Seurity.pwdEnder;


import org.springframework.security.crypto.password.PasswordEncoder;

import commons.utils.Md5Utils;
import lombok.extern.slf4j.Slf4j;

/**
 * 自定义加密,在这里给前台密码加密,并且与数据库比对
 * ClassName: MyPasswordE
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值