shiro入门

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
#认证(输入用户名和密码登录)不通过  自动跳转loginUrl
roles.loginUrl=/login.html
#授权(没有某个角色和权限) 不通过
roles.unauthorizedUrl=/un.html
perms.loginUrl=/login.html
perms.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]


 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值