在第一节中,我们重新定义了Realm,重新注册了securityManager。SecurityUtils会按照我们的期望工作了。如何用securityManager将我们的应用程序管理起来呢。
shiro只是提供安全控制的API,并不能识别我们应用程序中哪些是需要安全控制的资源,这部分的定义是需要我们自己来完成的。也就是说我们在需要安全控制的资源处加入安全控制的代码。
shiro提供了多种安全控制的判断方式:
编程实现:通过写if/else授权代码块完成:
Subject subject = SecurityUtils.getSubject();
if(subject.hasRole(“admin”)) {
//有权限
} else {
//无权限
}
注解实现:通过在执行的Java方法上放置相应的注解完成:
@RequiresRoles("admin")
public void hello() {
//有权限
}
注解式,你需要在你的应用程序中启用AOP 支持才能生效。
JSP/GSP标签实现:在JSP/GSP页面通过相应的标签完成:
<shiro:hasRole name="admin">
<!— 有权限 —>
</shiro:hasRole>
URL过滤实现:在 web应用中对url进行控制,需要启动shirofilter过滤
/admin/login.html = authc
/admin/index.html = authc
/admin/* = authc
...
以上方式其实都是将资源交付给securityManager进行管理,进而实现安全控制的目的。