springboot 简单使用shiro登录
首先引入需要的pom
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-web-starter</artifactId>
<version>1.4.1</version>
</dependency>
配置application.properties
#登录界面
shiro.loginUrl=/login
#无权限界面
shiro.unauthorizedUrl=/
#成功界面
shiro.successUrl=/index
自定义UserRealm
public class UserRealm extends AuthorizingRealm {
@Autowired
private UserService userService;
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
if(principalCollection == null){
throw new AuthenticationException("PrincipalCollection参数不能为空。");
}
TUser user = (TUser) getAvailablePrincipal(principalCollection);
if(ObjectUtils.isEmpty(user)){
throw new AuthenticationException("用户不存在");
}
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
if(ObjectUtils.isEmpty(user.getRole())){
info.setRoles(new HashSet<String>(){{add("public");}});
}else{
info.setRoles(new HashSet<String>(){{add(user.getRole());}});
}
return info;
}
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
String username = token.getUsername();
if(StringUtils.isEmpty(username)){
throw new UnknownAccountException();
}
TUser user = userService.fetchByUsername(username);
if(ObjectUtils.isEmpty(user)){
throw new UnknownAccountException();
}
if(user.getDisabled()){
throw new LockedAccountException();
}
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user,user.getPassword(),ByteSource.Util.bytes(user.getSalt()),getName());
return info;
}
}
添加用户时密码加密方法
public String md5(String password,String salt){
//加密方式
String algorithmName = "MD5";
//盐值
ByteSource byteSalt = ByteSource.Util.bytes(salt);
//加密次数
int hashIterations = 6;
SimpleHash result = new SimpleHash(algorithmName, password, byteSalt, hashIterations);
//Md2Hash Md5Hash Sha1Hash Sha256Hash Sha384Hash Sha512Hash 最后都是调用SimpleHash加密
//Md5Hash r = new Md5Hash(password,byteSalt,hashIterations);
return result.toHex();
}
配置 ShiroConfig
@Configuration
public class ShiroConfig { @Bean
public Realm realm(){
UserRealm userRealm = new UserRealm();
userRealm.setCredentialsMatcher(hashedCredentialsMatcher());
return userRealm;
}
/**
* 配置url
* anon 任何人都能访问
* authc 认证成功后才能访问
*/
@Bean
public ShiroFilterChainDefinition shiroFilterChainDefinition(){
DefaultShiroFilterChainDefinition chain = new DefaultShiroFilterChainDefinition();
Map<String,String> pathDefinitions = new HashMap<>();
pathDefinitions.put("/loginDo","anon");
pathDefinitions.put("/**","authc");
chain.addPathDefinitions(pathDefinitions);
return chain;
} /**
* 密码验证
* @return
*/
@Bean
public HashedCredentialsMatcher hashedCredentialsMatcher(){
HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher();
credentialsMatcher.setHashAlgorithmName("MD5");
credentialsMatcher.setHashIterations(6);
credentialsMatcher.setStoredCredentialsHexEncoded(true);
return credentialsMatcher;
} }
登录controller
@PostMapping("/loginDo")
@ResponseBody
public Result loginDo(String username, String password, boolean rememberMe) {
if(StringUtils.isEmpty(username)){
return Result.error("请输入用户名");
}
if(StringUtils.isEmpty(password)){
return Result.error("请输入密码");
}
try {
Subject subject = SecurityUtils.getSubject();
subject.login(new UsernamePasswordToken(username, password, rememberMe));
} catch (UnknownAccountException e1) {
return Result.error("用户名或密码错误");
} catch (LockedAccountException e2) {
return Result.error("用户已被锁定");
} catch (AuthenticationException e3) {
return Result.error("登录失败");
}
return Result.success();
}
springboot 简单使用shiro登录的更多相关文章
- 简单两步快速实现shiro的配置和使用,包含登录验证、角色验证、权限验证以及shiro登录注销流程(基于spring的方式,使用maven构建)
前言: shiro因为其简单.可靠.实现方便而成为现在最常用的安全框架,那么这篇文章除了会用简洁明了的方式讲一下基于spring的shiro详细配置和登录注销功能使用之外,也会根据惯例在文章最后总结一 ...
- shiro登录验证简单理解
这两天接手了下师兄的项目,要给系统加个日志管理模块,其中需要记录登录功能的日志,那么首先要知道系统的登录是在哪里实现验证的. 该系统把所有登录验证还有权限控制的工作都交给了shiro. 这篇文章就先简 ...
- Springboot - 建立简单的用户登录系统
在开始编码前,先建立几个Package(可以按个人习惯命名),如图 1.Controllers 用于存放控制器类 2.Models 用于存放数据实体类 3.Repositories 用于存放数据库操作 ...
- Shiro 登录认证源码详解
Shiro 登录认证源码详解 Apache Shiro 是一个强大且灵活的 Java 开源安全框架,拥有登录认证.授权管理.企业级会话管理和加密等功能,相比 Spring Security 来说要更加 ...
- jsp+servlet+mysql 实现简单的银行登录转账功能
jsp+servlet+mysql 实现简单的银行登录转账功能 [前期的准备] html(登录界面),servlet(处理业务逻辑),jsp(主要实现界面),mysql(实现与数据库的简单的交互)先从 ...
- Node.js基于Express框架搭建一个简单的注册登录Web功能
这个小应用使用到了node.js bootstrap express 以及数据库的操作 :使用mongoose对象模型来操作 mongodb 如果没了解过的可以先去基本了解一下相关概念~ 首先注 ...
- PhantomJS实现最简单的模拟登录方案
以前写爬虫,遇到需要登录的页面,一般都是通过chrome的检查元素,查看登录需要的参数和加密方法,如果网站的加密非常复杂,例如登录qq的,就会很蛋疼 在后面,有了Pyv8,就可以把加密的js文件扔给它 ...
- java实现简单的单点登录
java实现简单的单点登录 摘要:单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中.本文从业务的角度分析了单点登录的需求和应用领域:从技术本身的角度分析了单点登录技术的内部机制和实现 ...
- 搭建CAS服务器,并实现一个简单的单点登录的demo
官网:http://jasig.github.io/cas/Cas Server下载:http://developer.jasig.org/cas/Cas Client下载:http://develo ...
随机推荐
- 【leetcode刷题笔记】Gas Station
There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You ...
- python suds 调用webservice 缓存
在linux系统中 如果webservice更新了字段 suds调用有可能缓存以前的字段或方法,对新的字段报找不到类型 TypeNotFound,或者对 新加的方法找不到该方法的错误. 当更新或添加w ...
- 线段树_区间加乘(洛谷P3373模板)
题目描述 如题,已知一个数列,你需要进行下面三种操作: 1.将某区间每一个数乘上x 2.将某区间每一个数加上x 3.求出某区间每一个数的和 输入格式: 第一行包含三个整数N.M.P,分别表示该数列数字 ...
- 服务注册选型比较:Consul vs Zookeeper vs Etcd vs Eureka
zookeeper基于paxos的化简版zab,etcd基于raft算法.consul也是基于raft算法.etcd和consul作为后起之秀,并没有因为已经有了zookeeper而放弃自己,而是采用 ...
- Oracle 12C 新特性之级联truncate
12c之前的版本中,在子表引用一个主表以及子表存在记录的情况下,是不提供截断此主表操作的.而在 12c 中的带有 CASCADE 操作的TRUNCATE TABLE 可以截断主表中的记录,并自动对子表 ...
- [转]阮一峰:理解RESTful架构
作者: 阮一峰 日期: 2011年9月12日 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通 ...
- css--offsetParent
offsetParent属性返回一个对象的引用,这个对象是距离调用offsetParent的元素最近的(在包含层次中最靠近的),并且是已进行过CSS定位的容器元素. 如果这个容器元素未进行CSS定位, ...
- hdoj1113(字符串map应用)
#include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...
- 对API的理解
一. API(Application Programming Interface,应用程序编程接口) 1)定义:API是远程服务器或者操作系统的一些函数,是它们的一部分: 2)功能:用来接收应用程序( ...
- nmap 快速扫描所有端口
nmap -sT -sV -Pn -v xxx.xxx.xxx.xxx nmap -sS -p 1-65535 -v 192.168.1.254参数:-sS TCP SYN扫描 nmap ...