whyclxw
2024-12-10 88ed0e2971154580635fd33f3073e3a26f52fc3a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.whyc.filter;
 
import com.whyc.pojo.db_user.UserInf;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.CollectionUtils;
import org.apache.shiro.web.filter.authz.AuthorizationFilter;
 
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.util.Set;
 
/**
 * 自定义过滤规则,只需要包含某个角色,就授权
 */
public class RolesOrAuthorizationFilter extends AuthorizationFilter {
    @Override
    protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
        Subject subject = getSubject(request, response);
        String[] rolesArray = (String[]) mappedValue;
 
        if (rolesArray == null || rolesArray.length == 0) {
            return true;
        }
 
        Set<String> roles = CollectionUtils.asSet(rolesArray);
 
        //判断为or
        UserInf user = (UserInf) subject.getPrincipals().getPrimaryPrincipal();
        for (String role :roles){
            if (subject.hasRole(role)){
                return true;
            }
        }
        return false;
    }
}