一、在web.xml中添加shiro过滤器
<!-- Фильтр Широ--><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.
<!-- Фильтр Широ --><bean id="shiroFilter"> <property name="securityManager" ref="securityManager" /> <property name="loginUrl" value="/login" /> <property name= "successUrl" value="/user/list" /> <property name="unauthorizedUrl" value="/login" /> <property name="filterChainDefinitions"> <значение> /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">
<property name="realm" ref="myRealm" />
</боб>
3、添加realm定义
复制代码代码如下:
<bean id="myRealm" />
三、实现MyRealm:继承AuthorizingRealm,并重写认证授权方法
общественный класс MyRealm расширяет AuthorizingRealm {частный AccountManager accountManager; общественный недействительный setAccountManager (AccountManager accountManager) {this.accountManager = accountManager; } /** * 授权信息 */ protected AuthorizationInfo doGetAuthorizationInfo( Принципы PrincipalCollection) { String username=(String)principals.fromRealm(getName()).iterator().next(); if(имя пользователя!= null){Пользователь пользователя = accountManager.get(имя пользователя); if(user!= null && user.getRoles() != null) {Информация SimpleAuthorizationInfo = new SimpleAuthorizationInfo(); for( SecurityRole каждый: user.getRoles() ) { info.addRole(each.getName()); info.addStringPermissions(each.getPermissionsAsString()); } вернуть информацию; } } вернуть ноль; } /** * 认证信息 */ protected AuthenticationInfo doGetAuthenticationInfo( AuthenticationToken authcToken) бросает AuthenticationException { UsernamePasswordToken token = (UsernamePasswordToken) authcToken; Строка userName = token.getUsername(); if( userName != null && !").equals(userName) ){ Пользователь user = accountManager.login(token.getUsername(), String.valueOf(token.getPassword())); if(user!= null) возвращает новый SimpleAuthenticationInfo(user.getLoginName(),user.getPassword(), getName()); } Вернуть ноль; }}
参考资料:让Apache Shiro保护你的应用