一、在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.ตัวกรองชิโระฟิลเตอร์
<!-- ตัวกรอง Shiro --><bean id="shiroFilter"> <ชื่อคุณสมบัติ="securityManager" ref="securityManager" /> <ชื่อคุณสมบัติ="loginUrl" value="/login" /> <ชื่อคุณสมบัติ= "successUrl" value="/user/list" /> <ชื่อคุณสมบัติ="unauthorizedUrl" value="/login" /> <ชื่อคุณสมบัติ="filterChainDefinitions"> <value> /login = anon /user/** = authc /role/edit/* = perms[role:edit] /role/save = perms[role:edit] /role/list = perms[role:view] /** = รับรองความถูกต้อง </value> </property></bean>
2. ผู้จัดการฝ่ายรักษาความปลอดภัย 定义
复制代码代码如下:
<bean id="securityManager">
<ชื่อคุณสมบัติ="อาณาจักร" ref="myRealm" />
</ถั่ว>
3、添加อาณาจักร定义
复制代码代码如下:
<bean id=" myRealm" />
三、实现MyRealm:继承AuthorizingRealm,并重写认证授权方法
MyRealm ระดับสาธารณะขยาย AuthorizingRealm { accountManager ส่วนตัว accountManager; โมฆะสาธารณะ setAccountManager (AccountManager accountManager) { this.accountManager = accountManager; } /** * อนุญาต */ protected AuthorizationInfo doGetAuthorizationInfo( PrincipalCollection PrincipalCollection) { String username=(String)principals.fromRealm(getName()).iterator().next(); ถ้า ( ชื่อผู้ใช้ != null ){ ผู้ใช้ ผู้ใช้ = accountManager.get ( ชื่อผู้ใช้ ); ถ้า (ผู้ใช้ != null && user.getRoles() != null ){ ข้อมูล SimpleAuthorizationInfo = ใหม่ SimpleAuthorizationInfo(); สำหรับ( SecurityRole แต่ละ: user.getRoles() ){ info.addRole(each.getName()); info.addStringPermissions(each.getPermissionsAsString()); } ข้อมูลการส่งคืน; } } กลับเป็นโมฆะ; } /** * 认证信息 */ ป้องกัน AuthenticationInfo doGetAuthenticationInfo( AuthenticationToken authcToken ) พ่น AuthenticationException { UsernamePasswordToken token = (UsernamePasswordToken) authcToken; ชื่อผู้ใช้สตริง = token.getUsername(); if( ชื่อผู้ใช้ != null && !"".equals(ชื่อผู้ใช้) ){ ผู้ใช้ ผู้ใช้ = accountManager.login(token.getUsername(), String.valueOf(token.getPassword())); ถ้า ( ผู้ใช้ != null ) ส่งคืน SimpleAuthenticationInfo ใหม่ ( user.getLoginName(),user.getPassword(), getName()); } ส่งคืนค่าว่าง; -
参考资料:让Apache Shiro保护คุณ的应用