我正在使用Spring开发一个应用程序。在Access Control Access一节中,我想使用Spring Security Acl(我是Acl的新手)。我想在我的应用程序中实现ACL基于两点:
读取
、创建
、修改
、删除
和管理员
。创建
权限时,它应该能够读取
,或者当用户具有修改
权限时,它应该能够读取
、创建
和修改
等。更新:
我的应用程序是基于Spring MVC RESTful的。当用户想要修改自己的信息时,他用Ajax发送一些json数据。json数据的一个示例如下:
{
"id": 1,//user Id
"name": "my name",
"password": "my password",
"email": "email@email.com",
...
}
现在,恶意用户可以登录到自己的帐户。此用户可以像所有其他用户一样修改
其数据。在他发送数据之前,更改他的id,并修改
另一个帐户用户信息。我想用ACL来阻止这种颠覆性的工作。并且用户可以获得一些访问其他用户的权限,其他人可以修改他的信息。
您可以使用spring Security实现一个简单的解决方案。其思想是创建一个实现org.springframework.security.access.PermissionEvaluator的类,并重写方法HasPermission。看下一个例子:
@Component("permissionEvaluator")
public class PermissionEvaluator implements org.springframework.security.access.PermissionEvaluator {
/**
* @param authentication represents the user in question. Should not be null.
* @param targetDomainObject the domain object for which permissions should be
* checked. May be null in which case implementations should return false, as the null
* condition can be checked explicitly in the expression.
* @param permission a representation of the permission object as supplied by the
* expression system. Not null.
* @return true if the permission is granted, false otherwise
*/
@Override
public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) {
if (authentication != null && permission instanceof String) {
User loggedUser = (User) authentication.getPrincipal();
String permissionToCheck = (String) permission;
// in this part of the code you need to check if the loggedUser has the "permission" over the
// targetDomainObject. In this implementation the "permission" is a string, for example "read", or "update"
// The targetDomainObject is an actual object, for example a object of UserProfile class (a class that
// has the profile information for a User)
// You can implement the permission to check over the targetDomainObject in the way that suits you best
// A naive approach:
if (targetDomainObject.getClass().getSimpleName().compareTo("UserProfile") == 0) {
if ((UserProfile) targetDomainObject.getId() == loggedUser.getId())
return true;
}
// A more robust approach: you can have a table in your database holding permissions to each user over
// certain targetDomainObjects
List<Permission> userPermissions = permissionRepository.findByUserAndObject(loggedUser,
targetDomainObject.getClass().getSimpleName());
// now check if in userPermissions list we have the "permission" permission.
// ETC...
}
//access denied
return false;
}
}
现在,通过这个实现,您可以在例如服务层中使用@PreAuthorize注释,如下所示:
@PreAuthorize("hasPermission(#profile, 'update')")
public void updateUserProfileInASecureWay(UserProfile profile) {
//code to update user profile
}
@PreAuthorize注释中的“HasPermission”从updateUserProfileInASecureWay方法的params接收targetDomainObject#概要文件,我们还传递所需的权限(在本例中是“update”)。
该解决方案通过实现一个“小型”ACL来避免ACL的所有复杂性。也许对你有用。
我需要实现我的自定义DefaultComboxModel。这样做的原因是每次我打电话给 或者 或者 我看到它自动触发一个项目状态更改事件。这会导致一些随机项目自动从列表中选择。这不是我想要的,因为它用随机选择的项目填充可编辑的JTextField。 这是我在使用我的自定义Itemlistener中的Thread.dumpStack()进行调试时看到的stacktrace,它是我在调用上述方法时看到
问题内容: 作为一个例子,取子域映射。 然后,映射将如下所示: 如果我们想创建自定义的@RequestMapping属性,例如子域。创建这样的映射: 我们应该使用我们自己的实现覆盖定义并覆盖RequestMappingHandlerMapping受保护的方法 (如JIRA所述:“ 允许自定义请求映射条件SPR-7812 ”)。 这样对吗?有人可以提供提示,如何实现此功能吗? 想法1: 正如原始的j
本文:在Google App Engine上管理同一应用程序的多个域和子域,建议在筛选器上解析子域,并将变量分配给ServletRequest头。 那么映射将如下所示: 如果我们想创建自定义的@RequestMapping属性,比如subdomain,例如。要创建如下所示的映射: 也许像这样的类型和方法映射是可能的解决方案? 链接到forum.springsource.com上的相同问题
本文向大家介绍Java如何实现自定义异常类,包括了Java如何实现自定义异常类的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Java如何实现自定义异常类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 自定义异常类步骤 创建一个类继承异常父类Exception 在具体的实现方法首部抛出异常类(自己创建的那个类),throws的
问题内容: 我解析了.yaml文件,需要以自定义方式解组其属性之一。我正在使用包裹。 有问题的属性按如下方式存储在我的.yaml文件中: 因此,它基本上是一种类型。 但是我需要在哪里定义为: 我的结构: 我试图像这样实现Unmarshaler接口: 我的问题是在函数内部未定义类型,从而在运行时导致nil指针异常。 我如何在此处正确实现Unmarshaler接口? 问题答案: 由于@Volker并未
本文向大家介绍如何在jQuery中实现自定义事件?,包括了如何在jQuery中实现自定义事件?的使用技巧和注意事项,需要的朋友参考一下 自定义事件意味着您可以在jQuery中创建自己的事件。例如,创建一个自定义事件以在按下键盘上的任意键时触发警报框。 示例 您可以尝试运行以下代码以了解如何创建自定义事件,