shiro加入注解后 service层service对象注入失败 报java.lang.NullPointerException

qq_33363325 2018-04-13 10:54:21
目标是要开启shiro注解进行权限控制
这是applicationContext.xml的配置
<property name="filterChainDefinitions">
<value>
/css/** = anon
/js/** = anon
/images/** = anon
/validatecode.jsp* = anon
/login.jsp = anon
/userAction_login.action = anon
<!-- perms过滤器检查当前登录用户是否具有取派员列表查询权限 -->
<!-- 如果说当前登录用户具有这个权限 它就能够访问成功 没有这个权限会跳转到unauthorized.jsp -->
/page_base_staff.action = perms["staff-list"]
/page_base_region.action = perms["region-list"]
<!-- 一切的请求都会经过这个过滤器处理 -->
<!-- 这个过滤器用来检查你是否已经认证过了 就是说你是否已经登录过了 -->
/* = authc
</value>
</property>
</bean>

<!-- 注册安全管理器对象 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="bosRealm"/>
</bean>

<!-- 注册realm -->
<bean id="bosRealm" class="com.itheima.bos.realm.BOSRealm">
</bean>

<!-- 开启shiro框架注解支持 -->
<bean id="defaultAdvisorAutoProxyCreator"
class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
<!-- 必须使用cglib方式为Action对象创建代理对象 -->
<property name="proxyTargetClass" value="true"/>
</bean>

<!-- 配置shiro框架提供的切面类,用于创建代理对象 -->
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"/>

我在staffAction
@Controller
@Scope("prototype")
public class StaffAction extends BaseAction<Staff> {

@Resource
private IStaffService staffService;//要注入进去
private String ids;//提交的id串
//批量删除

@RequiresPermissions("staff-delete")//执行这个方法,需要当前用户具有staff-delete这个权限
public String deleteBatch() throws Exception {
staffService.deletebatch(ids);
return LIST;
}
加入这个注解就报nullpointer
这是进行验证的简单授权方法
public class BOSRealm extends AuthorizingRealm{

@Autowired
private IUserDao userDao;
@Autowired
private IStaffService staffService;
//授权
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
info.addStringPermission("staff-list");//硬编码了 看看当前登录用户是谁 他所实际对应的权限查出来
//然后循环调用这个方法
return info;
}
//认证 如果返回null说明认证失败了
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
System.out.println("自定义认证方法调用了...");
//根据用户名查询数据库中的密码
//认证逻辑是定死的不能更改
UsernamePasswordToken passwordToken = (UsernamePasswordToken) token;
String username = passwordToken.getUsername();
User user = userDao.findUserByusername(username);
//框架负责对比数据库中的密码和页面输入的密码是否一致
if(user==null){
//页面录入用户名不存在
return null;
}
//第一个参数放USER 就是为了绑定该线程 最终放到session里面
AuthenticationInfo info = new SimpleAuthenticationInfo(user, user.getPassword(), this.getName());
return info;
}
}
报错java.lang.NullPointerException
at cn.itheima.bos.web.action.StaffAction.pageQuery(StaffAction.java:46)
at cn.itheima.bos.web.action.StaffAction$$FastClassBySpringCGLIB$$6a8175fc.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
请教大神门帮我看一下,非常感谢
...全文
1000 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧