1、Shiro 介绍
- Apache Shiro 是一个强大且易用的java 安全框架,执行身份验证、授权、密码和会话管理。使用shiro的易于理解的API可以轻松的获得任何应用程序。从最小的移动应用程序,到最大的网络和企业应用程序。
- 主要功能 subject、securityManager和Realms
subject:即当前操作用户
securityManager: 来管理内部组件实例
realm: realm充当了shiro与应用安全的数据桥梁或者连接器。
2、增加pom.xml
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.9.1</version>
</dependency>
3、配置shiro
1、定义Shiroconfig类
/**
* 配置一个 SecurityManager安全管理器
* @return
*/
@Bean
public SecurityManager securityManager(Realm myRealm){
DefaultWebSecurityManager defaultSecurityManager = new DefaultWebSecurityManager();
defaultSecurityManager.setRealm(myRealm);
return defaultSecurityManager;
}
@Bean
public MyRealm myRealm(){
MyRealm myRealm = new MyRealm();
return myRealm;
}
/**
* 配置过滤器
* 例如 什么可以进行访问,什么不可以进行访问等等
* @return
*/
@Bean
public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager){
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setLoginUrl("/"); //配置用户登陆请求,如果需要进行登陆时,
// shiro就会进入这个请求进入登陆页面
shiroFilterFactoryBean.setSecurityManager(securityManager);
shiroFilterFactoryBean.setSuccessUrl("/success");//配置用户登陆成功时的请求,如果登陆成功后
// shiro就会进入这个请求进入该页面
shiroFilterFactoryBean.setUnauthorizedUrl("/nopermission");//配置没有权限时的请求页面
//配置权限拦截规则
Map<String,String> fileterChainMap = new LinkedHashMap<>();
fileterChainMap.put("/login","anon");//配置这里登陆请求时不需要进行认证
fileterChainMap.put("/logout","logout");//配置登陆的请求
fileterChainMap.put("/admin/*","authc");//配置一个admin开头的请求,需要进行认证
fileterChainMap.put("/user/*","authc");//配置一个user开头的请求,需要进行认证
fileterChainMap.put("/**","authc");//配置一个*开头的请求,需要进行认证
//设置 权限拦截规则
shiroFilterFactoryBean.setFilterChainDefinitionMap(fileterChainMap);
return shiroFilterFactoryBean;
}
2、定义 myRealm类
public class MyRealm extends AuthenticatingRealm {
/** 用户认证的方法
* 这里存放用户的用户名和密码等相关信息 AuthenticationToken
* @param authenticationToken
* @return
* @throws AuthenticationException
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
return null;
}
}
3、定义UserController类
@RequestMapping("/")
public String index(){
return "login";
}
@RequestMapping("/login")
public String login(){
return "redirect:/success";
}
@RequestMapping("/logout")
public String logout(){
return "redirect:/logout";
}
@RequestMapping("/success")
public String success(){
return "success";
}
@RequestMapping("/nopermission")
public String nopermission(){
return "nopermission";
}
@RequestMapping("/admin/test")
public String adminTest(){
return "admin/test";
}
@RequestMapping("/user/test")
public String userTest(){
return "user/test";
}
4、定义login.html nopermission.html success.html
- success.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
登陆成功
</body>
</html>
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="login" method="post">
账号:<input type="text" name="username"><br>
密码:<input type="text" name="username"><br>
<input type="button" value="登陆">
</form>
</body>
</html>
- 运行项目 浏览器localhost:8080