java安全框架下载文件_spring boot整合shiro安全框架过程解析

这篇文章主要介绍了spring boot整合shiro安全框架过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

题记:在学习了springboot和thymeleaf之后,想完成一个项目练练手,于是使用springboot+mybatis和thymeleaf完成一个博客系统,在完成的过程中出现的一些问题,将这些问题记录下来,作为自己的学习心得。在这先感谢群主TyCoding的Tumo项目,虽然本人实在太菜了,好些地方看不懂,但还是使我受益匪浅。

shiro作为一个小巧灵活的安全框架,在认证和授权方面简约但又不简单,十分容易上手使用。下面是整合shiro的具体流程。

1.添加依赖

org.apache.shiro

shiro-spring

1.3.2

org.apache.shiro

shiro-core

1.3.2

2.在springboot控制台中添加基础包的扫描和实体类的扫描注解

由于本人实在粗心,用try,catch将这个错误包起来了,所以找了一个下午的bug才发现。如果是用ssm整合shiro也大致一样,只不过需要在web.xml中添加一些配置信息。

具体流程大同小异。

@SpringBootApplication(scanBasePackages = "cn.zhq")

@EntityScan("cn.zhq.system.entity")

public class MyBlogApplication {

public static void main(String[] args) {

SpringApplication.run(MyBlogApplication.class);

}

}

3.自定义realm域

个人觉得realm就相当于一个数据源 ,shiro从realm中去获取一些数据,验证用户的认证和授权。

3.1 usermapper接口

@Mapper

public interface UserMapper {

/**

* 根据Name查询用户数据

*/

SysUser findByName(String username);

}

3.2 配置文件usermapper.xml

/p>

"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

select * from tb_user where username = #{username}

3.3 编写自定义realm并继承AuthorizingRealm

这里只贴出认证的方法。

@Autowired

private UserMapper userMapper;

@Override

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {

//1.获取登录的用户名密码(token)

UsernamePasswordToken upToken = (UsernamePasswordToken) authenticationToken;

String username = upToken.getUsername();

String password = new String( upToken.getPassword());

//2.根据用户名查询数据库

SysUser user = userMapper.findByName(username);

//3.判断用户是否存在或者密码是否一致

if(user != null && user.getPassword().equals(password)) {

//4.如果一致返回安全数据

//构造方法:安全数据,密码,realm域名

SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user,user.getPassword(),this.getName());

return info;

}

//5.不一致,返回null(抛出异常)

return null;

}

4.编写shiro配置类

4.1 安全管理器

//配置自定义的Realm

@Bean

public AuthRealm getRealm() {

return new AuthRealm();

}

//配置安全管理器

@Bean

public SecurityManager securityManager(AuthRealm realm) {

//使用默认的安全管理器

DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(realm);

//将自定义的realm交给安全管理器统一调度管理

securityManager.setRealm(realm);

return securityManager;

}

4.2 配置过滤器工厂

@Bean

public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {

//1.创建过滤器工厂

ShiroFilterFactoryBean filterFactory = new ShiroFilterFactoryBean();

//2.设置安全管理器

filterFactory.setSecurityManager(securityManager);

//3.通用配置(跳转登录页面,为授权跳转的页面)

filterFactory.setLoginUrl("#");//跳转url地址

filterFactory.setUnauthorizedUrl("#");//未授权的url

return filterFactory;

}

5. 编写controller方法

@RequestMapping(value="/login")

@ResponseBody

public String login(String username,String password) {

try{

Subject subject = SecurityUtils.getSubject();

UsernamePasswordToken uptoken = new UsernamePasswordToken(username,password);

subject.login(uptoken);

return "登录成功";

}catch (Exception e) {

return "用户名或密码错误";

}

}

6.登陆

6.1 获取md5加密的密码

由于密码是使用shiro提供的Md5加密方式。为了避免麻烦就直接打印加密之后的密码。

Md5Hash的参数代表的含义分别是 加密的内容 | 盐(加密的混淆字符串) | 加密次数

System.out.println(new Md5Hash("123456","zhangbo",3).toString());

4e1c59299e70237529d118cf1b6d66f6.png

5fae6f0ef7e12b6bf0b290b831dfa9e2.png

可以看到使用加密过的密码是可以登陆成功的,但使用原始密码是无法登陆成功的,可以在具体的业务逻辑层中添加用户时将密码进行加密处理。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值