admin 管理员组文章数量: 887152
2024年2月7日发(作者:mysql删除数据表)
一、 介绍:
shiro是apache提供的强大而灵活的开源安全框架,它主要用来处理身份认证,授权,企业会话管理和加密。
shiro功能:用户验证、用户执行访问权限控制、在任何环境下使用session API,如cs程序。可以使用多数据源如同时使用oracle、mysql。单点登录(sso)支持。remember me服务。详细介绍还请看官网的使用手册:/
与spring security区别,个人觉得二者的主要区别是:
1、shiro灵活性强,易学易扩展。同时,不仅可以在web中使用,可以工作在任务环境内中。
2、acegi灵活性较差,比较难懂,同时与spring整合性好。
如果对权限要求比较高的项目,个人建议使用shiro,主要原因是可以很容易按业务需求进行扩展。
附件是对与shiro集成的jar整合及源码。
二、shiro与spring集成
shiro默认的配置,主要是加载ini文件进行初始化工作,具体配置,还请看官网的使用手册(/)init文件不支持与spring的集成。此处主要是如何与spring及springmvc集成。
1、中配置shiro过滤器,中的配置类使用了spring的过滤代理类来完成。
Xml代码
1.
2.
3.
4. tingFilterProxy
5.
6.
7.
8.
9.
10.
2、在spring中的文件中添加shiro配置:
Xml代码
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18. /login/logoutlogout=logout
19. /login/**=anon
20. /**=authc,rest
21.
22.
23.
24.
25.
26.
27.
配置说明:
securityManager是shiro的核心,初始化时协调各个模块运行。
realm是shiro的桥梁,进行数据源配置,shrio提供了常用的realm数据源配置,如LDAP的JndiLdapRealm,JDBC的JdbcRealm,ini文件的IniRealm,properties文件的PropertiesRealm等,也可以插入自己的 Realm实现来代表自定义的数据源。此处使用了自定义的leopardRealm进行配置,java代码如下:
Java代码
1. public class LeopardRealm extends AuthorizingRealm {
2. /**
3. * 授权方法,在配有缓存的情况下,只加载一次。
4. */
5. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
6. SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
7. //获取用户信息的所有资料,如权限角色等.
8. //ingPermissions(权限集合);
9. //es(角色集合);
10. return info;
11. }
12. /**
13. * 登陆认证
14. */
15. @Override
16. protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token)
17. throws AuthenticationException {
18. UsernamePasswordToken usernamePasswordToke = (UsernamePasswordToken)token;
19. String username = rname();
20. return new SimpleAuthenticationInfo(new ShiroUser("admin", "admin"), "admin",
21. ("admin"), getName());
22.
23. }
24. }
shiroFilter:shiro的权限过滤器配置,可自定义过滤器并关联至filterChainDefinitions中。shiro过滤器说明:
shiro过滤器对应的类:
过滤器名称 对应的java类
anon
authc
authcBasic
logout
ionCreatition onFilterperms
port
rest
roles
ssl
user
lter
anon:例子/admins/**=anon 没有参数,表示可以匿名使用。
authc:例如/admins/user/**=authc表示需要认证(登录)才能使用,没有参数。
authcBasic:例如/admins/user/**=authcBasic没有参数表示httpBasic认证。
roles:例子/admins/user/**=roles[admin],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,当有多个参数时,例如admins/user/**=roles["admin,guest"],每个参数通过才算通过,相当于hasAllRoles()方法。
perms:例子/admins/user/**=perms[user:add:*],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,例如/admins/user/**=perms["user:add:*,user:modify:*"],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。
rest:例子/admins/user/**=rest[user],根据请求的方法,相当于/admins/user/**=perms[user:method] ,其中method为post,get,delete等。
port:例子/admins/user/**=port[8081],当请求的url的端口不是8081是跳转到schemal://serverName:8081?queryString,其中schmal是协议http或https等,serverName是你访问的host,8081是url配置里port的端口,queryString是你访问的url里的?后面的参数。
ssl:例子/admins/user/**=ssl没有参数,表示安全的url请求,协议为https
user:例如/admins/user/**=user没有参数表示必须存在用户,当登入操作时不做检查
注:这些过滤器中anon,authcBasic,auchc,user是认证过滤器,perms,roles,ssl,rest,port是授权过滤器
至此配置工作已完成。
简单登录操作:
代码
Jsp代码
1. <%@ page language="java" pageEncoding="UTF-8"%>
2.
3.
4.
10.
11.
springMVC控制层代码:
Java代码
1. import rvletRequest;
2. import rvletResponse;
3. import tyUtils;
4. import ticationException;
5. import ectCredentialsException;
6. import nAccountException;
7. import mePasswordToken;
8. import t;
9. import ller;
10. import tMapping;
11. import ndView;
12. @Controller("loginAction")
13. @RequestMapping("/login")
14. public class LoginAction {
15. @RequestMapping("")
16. //登录
17. public ModelAndView execute(HttpServletRequest request,
18. HttpServletResponse response,String username,String password) {
19. UsernamePasswordToken token = new UsernamePasswordToken(username,password);
20. //记录该令牌
21. emberMe(false);
22. //subject权限对象
23. Subject subject = ject();
24. try {
25. (token);
26. } catch (UnknownAccountException ex) {//用户名没有找到
27. tackTrace();
28. } catch (IncorrectCredentialsException ex) {//用户名密码不匹配
29. tackTrace();
30. }catch (AuthenticationException e) {//其他的登录错误
31. tackTrace();
32. }
33.
34. //验证是否成功登录的方法
35. if (enticated()) {
36. return new ModelAndView("/main/");
37. }
38. return new ModelAndView("/login/");
39. }
40.
41. //退出
42. @RequestMapping("/logout")
43. public void logout() {
44. Subject subject = ject();
45. ();
46. }
47. }
最后启动服务登录,实验证明,失败返回登录页,成功进入主页。
版权声明:本文标题:shiro入门教程 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1707300150h514077.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论