SSM с Shiro, фильтр неэффективен, просто отображается только при входе в систему, затем вы можете увидеть страницу, почему это происходит?

После запуска проекта, он отображается только после успешного входа в систему, затем вы можете увидеть страницу, когда я отлаживаю, обнаружил, что SecurityFilter не оправдан, метод UserRealm doGetAuthorizationInfo () не является оправданным. в чем проблема? Благодарен!,

Может кто-нибудь помочь мне разобраться, почему это произошло?

Это мой класс:

public class UserRealm extends AuthorizingRealm {


    @Resource
    private UserService userService;

    /**
     * @param principalCollection
     * @return
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        String username=principalCollection.getPrimaryPrincipal().toString();
        SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();
        Set<String> roleName=userService.findRoles(username);
        Set<String> permissions=userService.findPermissions(username);
        info.setRoles(roleName);
        info.setStringPermissions(permissions);
        return info;
    }

    /**
     * @param token
     * @return
     * @throws AuthenticationException
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {

        String username=token.getPrincipal().toString();
        User user=userService.findUserByUsername(username);
        if(user!=null){

            AuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user.getUsername(),user.getPassword(),user.getUsername()) ;
            return authenticationInfo;
        }else {
            return null;
        }
    }
}

фильтр:

открытый класс SecurityFilter расширяет AccessControlFilter {

@Override
protected boolean isAccessAllowed(ServletRequest request,
                                  ServletResponse response, Object mappedValue) throws Exception {


    HttpServletRequest httpServletRequest = (HttpServletRequest) request;
    String url = httpServletRequest.getRequestURI();

    if (null != token || isLoginRequest(request, response)) {
        return false;
    }
    return true;
}


@Override
protected boolean onAccessDenied(ServletRequest request,
                                 ServletResponse response) throws Exception {


    saveRequestAndRedirectToLogin(request, response);
    return false ;
}

}

область:

открытый класс UserRealm расширяет AuthorizingRealm {

@Ресурс

приватный UserService userService;

/ ** *

  • @param PrincipalCollection

    • @вернуть */

    @Override

protected AuthorizationInfo doGetAuthorizationInfo (PrincipalCollection PrincipalCollection) {

Строка username= PrincipalCollection.getPrimaryPrincipal(). ToString();

SimpleAuthorizationInfo info = new SimpleAuthorizationInfo ();

Установите roleName=userService.findRoles(имя пользователя);

Установить права доступа =userService.findPermissions(имя пользователя);

info.setRoles (RoleName);

info.setStringPermissions (разрешения);

возвращаемая информация;

}

/ ** *

  • @парам токен

    • @вернуть
  • @throws AuthenticationException

    * /

@Override

Защищенный AuthenticationInfo doGetAuthenticationInfo(токен AuthenticationToken) создает исключение AuthenticationException {

Строка username=token.getPrincipal(). ToString();

Пользователь user=userService.findUserByUsername(имя пользователя);

если (пользователь!= NULL) {

AuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo (user.getUsername(), user.getPassword (), user.getUsername());

вернуть аутентификацию Info; } еще {

вернуть ноль;

}

}

}

0 ответов

Другие вопросы по тегам