shiro入门
来源:互联网 发布:python运维流程系统 编辑:程序博客网 时间:2024/06/15 09:47
shiro笔记
加入依赖:
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.4.0</version></dependency><dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency>
十分钟入门:
public static void main(String[] args) {//从ini中读取权限信息构建SecurityManager对象Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:my.ini"); org.apache.shiro.mgt.SecurityManager securityManager = (org.apache.shiro.mgt.SecurityManager)factory.getInstance(); SecurityUtils.setSecurityManager(securityManager); //获取当前用户Subject currentUser = SecurityUtils.getSubject();//当前用户的回话Session session = currentUser.getSession();//判断是否登录 未登录才需要登录/** * 用户包括两部分 * principals and credentials * principals(本人)表示用户的标识信息 比如用户名 用户地址等 * credentials(凭证)表示用户用于登录的凭证 比如密码 证书等 */ if ( !currentUser.isAuthenticated() ) {UsernamePasswordToken token = new UsernamePasswordToken("jiaozi", "123456");//设置记住密码token.setRememberMe(true);try { currentUser.login( token ); System.out.println("登录成功"); System.out.println(currentUser.isAuthenticated()); System.out.println(currentUser.isRemembered()); //检查登录后的用户是否拥有某个角色 if(currentUser.hasRole("role1")){ System.out.println("是否拥有role1的角色 "); } if(currentUser.isPermitted("user:query:1")){ System.out.println("拥有查询1号的权限"); }} catch ( UnknownAccountException uae ) { System.out.println("账号错误");} catch ( IncorrectCredentialsException ice ) { System.out.println("密码不匹配");} catch ( LockedAccountException lae ) { System.out.println("账号被锁定");} catch ( AuthenticationException ae ) { System.out.println("位置异常");}}}}
Ini配置:
1. # =======================
2. # Shiro INI configuration
3. # =======================
4.
5. [main]
6.
7. [users]
8. # 设置用户信息
9. # 语法是 username = password, roleName1, roleName2, …, roleNameN
10. jiaozi = 123456,role1
11.
12. [roles]
13. # 角色信息和角色拥有的权限
14. #语法是 rolename = permissionDefinition1, permissionDefinition2, …, permissionDefinitionN
15. #权限的语法 * 表示所有权限 一般语法是 权限类型.权限动作.权限的资源id 比如 user:delete:1 表示拥有删除1号用户的权限 user:delete:*表示删除所有用户权限
16. admin = *
17. role1 = user:query:*, user:delete:1
18.
19. [urls]
20. # web中的url过滤
加入web程序:
加入依赖:
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-web</artifactId> <version>1.4.0</version> </dependency>
web.xml添加shiro支持的过滤器和ini文件路径配置参数
1. <context-param>
2. <param-name>shiroConfigLocations</param-name>
3. <param-value>/WEB-INF/shiro.ini</param-value>
4. </context-param>
5. <listener>
6. <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
7. </listener>
8. <filter>
9. <filter-name>ShiroFilter</filter-name>
10. <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
11. </filter>
12. <filter-mapping>
13. <filter-name>ShiroFilter</filter-name>
14. <url-pattern>/*</url-pattern>
15. <dispatcher>REQUEST</dispatcher>
16. <dispatcher>FORWARD</dispatcher>
17. <dispatcher>INCLUDE</dispatcher>
18. <dispatcher>ERROR</dispatcher>
19. </filter-mapping>
登录页面:
<form action="LoginServlet" method="post"> 用戶名 :<input type="text" name="userName"/> 密碼:<input type="text" name="password"/> <input type="submit"> </form>
配置ini:
[main]#当登陆不成功是自动跳转到登陆页面 authc.loginUrl=/login.html#认证(输入用户名和密码登录)不通过 自动跳转loginUrlroles.loginUrl=/login.html#授权(没有某个角色和权限) 不通过roles.unauthorizedUrl=/un.htmlperms.loginUrl=/login.htmlperms.unauthorizedUrl=/un.html[users] # 设置用户信息 # 语法是 username = password, roleName1, roleName2, …, roleNameN jiaozi = 123456,role1 [roles] # 角色信息和角色拥有的权限 #语法是 rolename = permissionDefinition1, permissionDefinition2, …, permissionDefinitionN #权限的语法 * 表示所有权限 一般语法是 权限类型.权限动作.权限的资源id 比如 user:delete:1 表示拥有删除1号用户的权限 user:delete:*表示删除所有用户权限 admin = * role1 = user:query:*, user:delete:1 [urls] # web中的url过滤 访问这个页面时 要求你登录的账号 必须拥有某些权限/login.html = anon/scu.jsp = perms[user:delete:2]
- shiro入门
- shiro入门
- Shiro入门
- shiro入门
- shiro入门
- Shiro 入门
- Shiro 入门
- Shiro 入门
- Shiro 入门
- shiro入门
- shiro入门
- shiro入门
- shiro入门
- shiro入门
- Shiro入门(1)
- shiro入门(1)
- shiro入门实例
- shiro入门实例
- Queue
- Source Insight 常用快捷键
- java8汇总
- Restful PUT 方法,server端接受不到参数
- zabbix触发器表达式详解
- shiro入门
- View下拉刷新加载更多
- python安装requests库
- 神经网络浅讲:从神经元到深度学习
- smartbi部署到linux+tomcat+mysql5.5
- 使用xshell连接服务器,及查看服务器内容的指令--小白篇
- 存token
- 使用canvas的按钮、视图引导
- 实现单例核心思想