Spring、SpringMVC、Shiro实现控制层授权检测

2024-11-17 06:38:48

1、控制层注解实现权限检测为了可以更好的说明问题,下面模拟一个新的NewsAction,提供CRUD伪操作方法:1、建议一个NewsActionpackage com.gwolf.action;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;@Controller@RequestMapping("/pages/news/*")public class NewsAction { private Logger log = LoggerFactory.getLogger(NewsAction.class); @RequestMapping("add") public ModelAndView add() { log.info("******[NewsAction/add]***********"); return null; } @RequestMapping("edit") public ModelAndView edit() { log.info("******[NewsAction/edit]***********"); return null; } @RequestMapping("remove") public ModelAndView remove() { log.info("******[NewsAction/remove]***********"); return null; } @RequestMapping("list") public ModelAndView list() { log.info("******[NewsAction/list]***********"); return null; }}

Spring、SpringMVC、Shiro实现控制层授权检测

2、在applicationContext.xml中配置上述action的访问经过认证才能访问,此时值需要进行认证,不需要进行授权的检测,所有的授权检测将通过Action自己完成。<!-- shiro里面需要针对于所有的路径进行配置 --> <property name="filterChainDefinitions"> <value> /loginUrl=authc /*=anon /messages/**=authc /admin*=authc /welcome.jsp=authc,perms[member:add] /pages/news/**=authc </value> </property>

Spring、SpringMVC、Shiro实现控制层授权检测

3、如果要想进行操作的启用,还需要修改applicationMVC.xml文件。1、需要启用AOP的代理设计程序。<!-- 启动在shiro里面进行Annotation的相关验证处理操作 --> <bean id="defaultAdvisorAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor"> <property name="proxyTargetClass" value="true"></property> </bean>2、针对于安全管理器进行的AOP配置:<!-- 正对于安全管理实现的aop操作 --> <bean id="AuthorizationAttributeSourceAdvisor" class=" org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <property name="securityManager" ref="securityManager"></property> </bean>

Spring、SpringMVC、Shiro实现控制层授权检测

4、在shiro里面针对于控制层注解有如下几种:1、认证检测:@RequiresAuthentication,该控制方法必须登陆后才可以使用;如果此时不希望页面出现500的错误信息,那么需要修改web.xml文件增加错误页的配置。<error-page> <exception-type>org.apache.shiro.authz.UnauthenticatedException</exception-type> <location>/loginUrl</location> </error-page>

Spring、SpringMVC、Shiro实现控制层授权检测

5、游客检测:@RequestMapping("edit") @RequiresGuest public ModelAndView edit() { log.info("******[NewsAction/edit]***********"); return null; }

Spring、SpringMVC、Shiro实现控制层授权检测

6、授权检测:1、角色:@RequestMapping("remove") @RequiresRoles("member") public ModelAndView remove() { log.info("******[NewsAction/remove]***********"); return null; }2、权限:@RequiresPermissions("emp:list") @RequestMapping("list") public ModelAndView list() { log.info("******[NewsAction/list]***********"); return null; }

Spring、SpringMVC、Shiro实现控制层授权检测

7、此时如果没有对应的权限或者是角色,则会出现“org.apache.shiro.authz.UnauthorizedException”异常,所以还需要在web.xml文件里面配置一个错误页

猜你喜欢