shiro (五) spring结合 -- Realm

package com.miv.shiro.common;

import org.apache.shiro.authc.AuthenticationException;

import org.apache.shiro.authc.AuthenticationInfo;

import org.apache.shiro.authc.AuthenticationToken;

import org.apache.shiro.authc.LockedAccountException;

import org.apache.shiro.authc.SimpleAuthenticationInfo;

import org.apache.shiro.authc.UnknownAccountException;

import org.apache.shiro.authz.AuthorizationException;

import org.apache.shiro.authz.AuthorizationInfo;

import org.apache.shiro.authz.SimpleAuthorizationInfo;

import org.apache.shiro.realm.AuthorizingRealm;

import org.apache.shiro.subject.PrincipalCollection;

import com.miv.core.constant.DatabaseConstants;

import com.miv.entity.Role;

import com.miv.entity.User;

import com.miv.shiro.login.service.LoginService;

import com.miv.shiro.role.service.RolesService;

/**

 * shiro与工程接口类

 * 

 * @author 赵治宇

 * @version

 */

public class WebRealm extends AuthorizingRealm {

    private LoginService loginService;

    private RolesService rolesService;

    public WebRealm() {

        setName("WebRealm");

    }

    public void setLoginService(LoginService loginService) {

        this.loginService = loginService;

    }

    public void setRolesService(RolesService rolesService) {

        this.rolesService = rolesService;

    }

    /**

     * 授权方法

     * 

     * @return

     */

    @Override

    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) throws AuthorizationException {

        String userName = (String) principals.fromRealm(getName()).iterator().next();

        User user = new User();

        user.setLoginName(userName);

        try {

            user = loginService.findUserByUsername(user);

        } catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();

        /*

         * List<Roles> roleList = rolesService.getCurrentRoleList(user); if (user != null) {

         * 

         * for (Roles role : roleList) { info.addRole(role.getRoleName()); } }

         */

        Role role = rolesService.findRoleById(user);

        if (role == null) {

            throw new AuthorizationException();

        }

        info.addRole(role.getRoleCode());

        return info;

    }

    /**

     * 认证方法

     * 

     * @return

     */

    @Override

    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {

        MIVshiroToken token = (MIVshiroToken) authcToken;

        User user = new User();

        user.setLoginName(token.getUsername());

        user.setPassword(String.valueOf(token.getPassword()));

        Role role = new Role();

        role.setId(token.getROLE_CODE() + 0L);

        user.setRole(role);

        try {

            user = loginService.findUserByUsernameAndPassword(user);

        } catch (Exception e) {

            throw new AuthenticationException();

        }

        if (user != null) {

            boolean flag = token.getROLE_CODE().equals(DatabaseConstants.ROLE_CODE_AGENCY)

                    || token.getROLE_CODE().equals(DatabaseConstants.ROLE_CODE_CALL_CENTER)

                    || token.getROLE_CODE().equals(DatabaseConstants.ROLE_CODE_ADMIN)

                    || token.getROLE_CODE().equals(DatabaseConstants.ROLE_CODE_USER);

            if (user.getStatus() == DatabaseConstants.STATUS_2.intValue() && flag) {

                throw new LockedAccountException();

            } else {

                return new SimpleAuthenticationInfo(user.getLoginName(), user.getPassword(), getName());

            }

        } else {

            throw new UnknownAccountException();

        }

    }

}


猜你喜欢

转载自zhiyu-zzy-163-com.iteye.com/blog/1680359