`
kdboy
  • 浏览: 759059 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于Spring框架的Shiro配置

阅读更多
一、在web.xml中添加shiro过滤器
	<!-- Shiro filter-->
	<filter>
		<filter-name>shiroFilter</filter-name>
		<filter-class>
			org.springframework.web.filter.DelegatingFilterProxy
		</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>shiroFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

二、在Spring的applicationContext.xml中添加shiro配置
1、添加shiroFilter定义
<!-- Shiro Filter -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
	<property name="securityManager" ref="securityManager" />
	<property name="loginUrl" value="/login" />
	<property name="successUrl" value="/user/list" />
	<property name="unauthorizedUrl" value="/login" />
	<property name="filterChainDefinitions">
		<value>
			/login = anon
			/user/** = authc
			/role/edit/* = perms[role:edit]
			/role/save = perms[role:edit]
			/role/list = perms[role:view]
			/** = authc
		</value>
	</property>
</bean>

2、添加securityManager定义
	<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
		<property name="realm" ref="myRealm" />
	</bean>

3、添加realm定义
<bean id=" myRealm" class="com...MyRealm" />

三、实现MyRealm:继承AuthorizingRealm,并重写认证授权方法
public class MyRealm extends AuthorizingRealm{

	private AccountManager accountManager;
	public void setAccountManager(AccountManager accountManager) {
		this.accountManager = accountManager;
	}

	/**
	 * 授权信息
	 */
	protected AuthorizationInfo doGetAuthorizationInfo(
				PrincipalCollection principals) {
		String username=(String)principals.fromRealm(getName()).iterator().next();
		if( username != null ){
			User user = accountManager.get( username );
			if( user != null && user.getRoles() != null ){
				SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
				for( SecurityRole each: user.getRoles() ){
						info.addRole(each.getName());
						info.addStringPermissions(each.getPermissionsAsString());
				}
				return info;
			}
		}
		return null;
	}

	/**
	 * 认证信息
	 */
	protected AuthenticationInfo doGetAuthenticationInfo(
				AuthenticationToken authcToken ) throws AuthenticationException {
		UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
		String userName = token.getUsername();
		if( userName != null && !"".equals(userName) ){
			User user = accountManager.login(token.getUsername(),
							String.valueOf(token.getPassword()));

			if( user != null )
				return new SimpleAuthenticationInfo(
							user.getLoginName(),user.getPassword(), getName());
		}
		return null;
	}

}


参考资料:让Apache Shiro保护你的应用
17
4
分享到:
评论
17 楼 风雪无殇 2016-04-10  
请教一个问题:
  我在 shiro-spring 与异步通信框(基于servlet3 和spring mvc 的callable)架结合使用时,发现虽然能够实现异步响应,但是回话就会报错,也就是无法keep-alived   请问怎么解决这个问题。
15 楼 yangleqiao 2014-06-10  
求一个demo  先谢谢  我的邮箱leqiao88@163.com
14 楼 冬天秋天 2013-12-09  
哥们,你的代码贴得不全面啊。
13 楼 qq466862016 2013-07-23  
demo 求 发下  466862016@qq.com
12 楼 kdboy 2012-11-07  
直觉 写道
能不能贴下 User  ,user.getRoles()   是咋么弄的

roles是User对象的属性,是用户关联的角色列表。
11 楼 直觉 2012-11-07  
能不能贴下 User  ,user.getRoles()   是咋么弄的
10 楼 holysky 2012-03-28  
貌似是springside的代码啊!
9 楼 oppal 2012-03-26  
springside里的mini-web就是demo了
8 楼 a19870822cp 2011-12-22  
求demo 好难弄
a19871001dms@163.com
7 楼 guangsheng_sun 2011-12-08  
guangsheng_sun@126.com
6 楼 guangsheng_sun 2011-12-08  
给个demo看看吧,试了下,不成功啊
5 楼 binghejinjun 2011-09-14  
楼主,问你个问题,我自定义的登录页面form里的action怎么写呢?提交给谁呢?怎样才能到达你的MyRealm中的认证方法呢?
4 楼 johnjmx 2011-08-29  
能给个demo吗?  johnjmx@126.com
3 楼 wzdduncan 2011-08-15  
可否给个demo呢? wzdduncan@163.com
2 楼 quickbomber 2011-08-11  
是啊,能否发一个demo呢?
quickbomber@gmail.com
1 楼 mjjs04 2011-08-04  
能给个DEMO吗

相关推荐

Global site tag (gtag.js) - Google Analytics