衢州 网站建设/免费发布推广信息的软件
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*/@Beanpublic SecurityManager securityManager(Realm myRealm){DefaultWebSecurityManager defaultSecurityManager = new DefaultWebSecurityManager();defaultSecurityManager.setRealm(myRealm);return defaultSecurityManager;}@Beanpublic MyRealm myRealm(){MyRealm myRealm = new MyRealm();return myRealm;}/*** 配置过滤器* 例如 什么可以进行访问,什么不可以进行访问等等* @return*/@Beanpublic 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*/@Overrideprotected 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