发表于: 2017-08-04 23:51:13

2 919



遇到的问题:

1、完全相同的代码,server在我电脑上启动时居然报了错,被吓了一跳。

这个错误出现了两次,第一次在重启idea后正常。之后的一次在重启电脑后server启动正常。

收获:

1、前端告诉说有一个我写的接口在翻页时会报错,我看了控制台是空指针异常,查了下原因是因为有个地方忘记作判空。


改好后未及时提交,等需要提交时发现在225连不上开发机二了,造成service端无法开启、无法提交至 svn 。没办法只能开启屏幕分享,把代码复制给李昂,在他那里修复了这个bug,我记得他之后提交了。


晚上我移到了217,连上了svn,又改动了一处代码,之后提交,提交前却忘了更新svn。(下午改好的那个bug 于是就这样被我覆盖了)

第二天前端告诉我那个接口又报错了,我急忙翻找到那段代码,发现依然是没判空。



2、现在萝卜多中的:

需要权限管理的是后台系统,

后台系统分目前分为3个模块:可以把他们理解为3个权限

用户管理、权限管理、模块管理。

而他们都包含了“增删改查”这4个“下一级”的权限,但由于项目中只要求对模块访问进行权限验证,不要求对增删改查权限的要求。



现在登录和权限验证以及被shiro框架接管了。

与spring集成以及相关的配置有这么几步。

在pom引入shiro-spring依赖、

在web.xml配置shiroFilter(DelegatingFilterProxy会自动到Spring容器中查找名字为shiroFilter的bean并把filter请求交给它处理。

下面就是shiroFilter,把所有

Bean(name = "shiroFilter")
@DependsOn("securityManager")
public ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultSecurityManager securityManager, Realm realm) {
securityManager.setRealm(realm);

   ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
   shiroFilter.setSecurityManager(securityManager);
   shiroFilter.setLoginUrl("/a/login");
   shiroFilter.setSuccessUrl("/a/u/welcome");
filterChainDefinitionMap.put("/a/u/company/**", "anon");
filterChainDefinitionMap.put("/a/u/job/**", "anon");
filterChainDefinitionMap.put("/a/u/article/**", "anon");
filterChainDefinitionMap.put("/a/u/img/**", "anon");
filterChainDefinitionMap.put("/a/u/user/**", "perms[system:user]");
filterChainDefinitionMap.put("/a/u/role/**", "perms[system:role]");
filterChainDefinitionMap.put("/a/u/module/**", "perms[system:module]");
shiroFilter.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilter;


之后的一个重要部分是realm,在这里

@Component

public class MyRealm extends AuthorizingRealm {

   

@Override
protected AuthorizationInfo doGetAuthorizationInfo(

       PrincipalCollection principals) {

        //   从principals中能取出当前登录用户、把该用户的权限都加到一个集合中,把集合设置到返回的info类中。

}

@Override
protected AuthenticationInfo doGetAuthenticationInfo(

       AuthenticationToken token) throws AuthenticationException {

       // 自己写账号密码验证逻辑,账号或密码不对时 都抛出同一个异常就可以

       //  如果验证无误,则返回一个info类,把用户类设置进去。

}

}

这样设置好之后,每当访问一个路径,都会进入 doGetAuthorizationInfo 方法,搜集该用户的所有权限。 如果有访问权限则将








返回列表 返回列表
评论

    分享到