Java security
博客专区 > pandudu 的博客 > 博客详情
Java security
pandudu 发表于6个月前
Java security
  • 发表于 6个月前
  • 阅读 30
  • 收藏 0
  • 点赞 0
  • 评论 2

标题:腾讯云 新注册用户域名抢购1元起>>>   

权限控制类的目前有两个比较流行的框架:shiro和spring-security

简单的判断使用的方法:如果用了spring框架,可用spring-security;反之,可用shiro.

1)Apache Shiro
Apache Shiro:http://shiro.apache.org/
在Web项目中应用 Apache Shiro:http://www.ibm.com/developerworks/cn/java/j-lo-shiro/
Apache Shiro权限框架在SpringMVC+Hibernate中的应用:http://www.thinksaas.cn/group/topic/99971/
让Apache Shiro保护你的应用:http://www.infoq.com/cn/articles/apache-shiro/
Integrating Apache Shiro into Spring-based Applications:http://shiro.apache.org/spring.html
将 Shiro 作为应用的权限基础:http://www.ibm.com/developerworks/cn/opensource/os-cn-shiro/
Spring Security:http://projects.spring.io/spring-security/
Apache Shiro 简介:http://www.ibm.com/developerworks/cn/web/wa-apacheshiro/
跟我学《Shiro》:http://jinnianshilongnian.iteye.com/category/305053
Apache Shiro开源文档:http://www.open-open.com/doc/list/256
10 Minute Tutorial on Apache Shiro:http://shiro.apache.org/10-minute-tutorial.html

2)Spring Security
Spring Security:http://projects.spring.io/spring-security
Spring Security帮助文档:http://docs.spring.io/spring-security/site/docs/4.0.0.RC2/reference/htmlsingle
SpringSecurity教程:http://blog.csdn.net/column/details/springsecurity.html
Acegi Security(Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全系统能够轻松地适用于复杂的安全需求,Acegi成为Spring子项目后改名为Spring Security)
Acegi Security:http://www.oschina.net/p/acegi+security
Acegi Security 初探一:http://genius-zhang.iteye.com/blog/309109
  • shiro

    shiro是一个权限管理框架,是apache下的开源项目。相比spring security框架更简单灵活,spring security对spring依赖较强。shiro可以实现web系统、c/s、分布式等系统 权限管理。

  • shiro认证流程:

         1、subject(主体)请求认证,调用subject.login(token)

         2、SecurityManager (安全管理器)执行认证

         3、SecurityManager通过ModularRealmAuthenticator进行认证。

         4、ModularRealmAuthenticator将token传给realm,realm根据token中用户信息从数据库查询用户信息(包括身份和凭证)

    5、realm如果查询不到用户给ModularRealmAuthenticator返回null,ModularRealmAuthenticator抛出异常(用户不存在)

         6、realm如果查询到用户给ModularRealmAuthenticator返回AuthenticationInfo(认证信息)

         7、ModularRealmAuthenticator拿着AuthenticationInfo(认证信息)去进行凭证(密码 )比对。如果一致则认证通过,如果不致抛出异常(凭证错误)。

  • shiro过滤器

过滤器简称

对应的java类

anon

org.apache.shiro.web.filter.authc.AnonymousFilter

authc

org.apache.shiro.web.filter.authc.FormAuthenticationFilter

authcBasic

org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter

perms

org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter

port

org.apache.shiro.web.filter.authz.PortFilter

rest

org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter

roles

org.apache.shiro.web.filter.authz.RolesAuthorizationFilter

ssl

org.apache.shiro.web.filter.authz.SslFilter

user

org.apache.shiro.web.filter.authc.UserFilter

logout

org.apache.shiro.web.filter.authc.LogoutFilter

anon:例子/admins/**=anon 没有参数,表示可以匿名使用。

authc:例如/admins/user/**=authc表示需要认证(登录)才能使用,FormAuthenticationFilter是表单认证,没有参数

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里的?后面的参数。

authcBasic:例如/admins/user/**=authcBasic没有参数表示httpBasic认证

 

ssl:例子/admins/user/**=ssl没有参数,表示安全的url请求,协议为https

user:例如/admins/user/**=user没有参数表示必须存在用户, 身份认证通过或通过记住我认证通过的可以访问,当登入操作时不做检查

注:

anon,authcBasic,auchc,user是认证过滤器,

perms,roles,ssl,rest,port是授权过滤器

  • shiro 实现session共享

shiro实现session共享

  • shiro密码匹配规则

	<!-- 自定义realm -->
	<bean id="userRealm" class="org.dp.twinkle.user.web.shiro.CustomRealm">
		<property name="credentialsMatcher" ref="credentialsMatcher"></property>
	</bean>

	<!-- 凭证匹配器:MD5加密校验 -->
	<bean id="credentialsMatcher" class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
		<property name="hashAlgorithmName" value="MD5"></property>
	</bean>

注意:HashedCredentialsMatcher中hashAlgorithmName根据setXXX设值,不是根据属性hashAlgorithm设值.源码如下:

public class HashedCredentialsMatcher extends SimpleCredentialsMatcher {

    private String hashAlgorithm;

    public void setHashAlgorithmName(String hashAlgorithmName) {
        this.hashAlgorithm = hashAlgorithmName;
    }

// ...

spring-shiro-training思维导图

 

 

 

 

 

 

  • spring security :

todo 

 

 

Web安全:

基于Token的WEB后台认证机制

 

 

标签: Shiro
共有 人打赏支持
粉丝 14
博文 43
码字总数 17169
评论 (2)
pandudu
add "shiro过滤器"
pandudu
add "shiro和spring security 简单对比"
×
pandudu
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: