Java tutorial
/** * Copyright (C) 2012 - 2013, Grass CRM Studio * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.gcrm.util.security; import java.lang.reflect.Field; import java.util.List; import java.util.Map; import java.util.ResourceBundle; import org.springframework.security.access.AccessDeniedException; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import com.gcrm.domain.BaseEntity; import com.gcrm.domain.Role; import com.gcrm.domain.User; import com.gcrm.security.AuthenticationSuccessListener; import com.gcrm.service.IUserService; import com.gcrm.util.BeanUtil; import com.gcrm.util.CommonUtil; import com.gcrm.util.spring.SpringContextUtil; import com.opensymphony.xwork2.ActionContext; /** * User util */ public class UserUtil { /** * Gets current login user name * * @return curretn login user name */ public static String getUserName() { try { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); UserDetails userDetails = (UserDetails) authentication.getPrincipal(); return userDetails.getUsername(); } catch (Exception e) { return null; } } /** * Gets user by user name * * @param userName * user name * @return user instance */ public static User getUser(String userName) { IUserService userService = (IUserService) SpringContextUtil.getBean("userService"); StringBuilder hqlBuilder = new StringBuilder("select new User(name,password) from User"); hqlBuilder.append(" where name = ?"); try { List<User> result = userService.findByParam(hqlBuilder.toString(), userName); if (result == null) { return null; } else { return result.get(0); } } catch (Exception e) { return null; } } public static void setAccessValue(Role role, User user) throws Exception { Field[] fields = role.getClass().getDeclaredFields(); for (Field field : fields) { String fieldName = field.getName(); if (fieldName.startsWith("scope_") || fieldName.startsWith("view_") || fieldName.startsWith("create_") || fieldName.startsWith("update_") || fieldName.startsWith("delete_")) { Integer valueOfRole = (Integer) BeanUtil.getFieldValue(role, fieldName); if (valueOfRole == null) { continue; } Integer valueOfUser = (Integer) BeanUtil.getFieldValue(user, fieldName); switch (valueOfRole) { case Role.NOT_SET: if (valueOfUser == null) { BeanUtil.setFieldValue(user, fieldName, Role.NOT_SET); } break; case Role.ALL_OR_ENABLED: if (valueOfUser == null || valueOfUser != Role.OWNER_OR_DISABLED) { BeanUtil.setFieldValue(user, fieldName, Role.ALL_OR_ENABLED); } break; case Role.OWNER_OR_DISABLED: BeanUtil.setFieldValue(user, fieldName, Role.OWNER_OR_DISABLED); break; } } } } public static void permissionCheck(String fieldName) throws Exception { User loginUser = UserUtil.getLoginUser(); Integer value = (Integer) BeanUtil.getFieldValue(loginUser, fieldName); if (value != Role.ALL_OR_ENABLED) { ResourceBundle rb = CommonUtil.getResourceBundle(); String errorMessage = rb.getString("access.nopermission"); throw new AccessDeniedException(errorMessage); } } public static void scopeCheck(BaseEntity entity, String fieldName) throws Exception { User loginUser = UserUtil.getLoginUser(); Integer value = (Integer) BeanUtil.getFieldValue(loginUser, fieldName); if (value == Role.OWNER_OR_DISABLED) { if (loginUser.getId().intValue() != entity.getOwner().getId().intValue()) { ResourceBundle rb = CommonUtil.getResourceBundle(); String errorMessage = rb.getString("access.nopermission.record"); throw new AccessDeniedException(errorMessage); } } } public static User getLoginUser() { ActionContext context = ActionContext.getContext(); Map<String, Object> session = context.getSession(); User loginUser = (User) session.get(AuthenticationSuccessListener.LOGIN_USER); return loginUser; } }