Tag: spring security

当用户在Spring启动应用程序中输入无效URL时,如何显示自定义404页面?

我在spring boot,spring安全应用程序中使用java配置。 我已将错误控制器配置如下。 但每当我输入一个无效的URL时,它会转到error.jsp ,它被配置为处理应用程序中的错误: @Controller public class AppErrorController implements ErrorController { private static final String PATH = “/error”; @RequestMapping(value = “/pageNotFound”, method = { RequestMethod.GET, RequestMethod.POST }) public String pageNotFound() { return “pageNotFound”; } @RequestMapping(value = “/accessDenied”, method = { RequestMethod.GET, RequestMethod.POST }) public String accessDenied() { return “accessDenied”; } @RequestMapping(value = PATH) public […]

Spring Security实体字段级安全性

我有一个Spring MVC应用程序,它提供了一个视图,显示了Customer实体的所有字段,如名称,地址,电话号码等。应用程序具有各种角色,如ROLE_USER和ROLE_ADMIN 。 具有ROLE_USER用户只能看到客户名称,因为具有ROLE_ADMIN用户可以看到所有客户字段。 目前,我实现此方法的方法是使用Thymeleaf视图,该视图利用SpringSecurityDialect根据用户的角色限制对某些字段的访问: 虽然这种方法非常好但感觉不对,但很难测试。 我想针对控制器编写测试,该控制器使用具有不同角色的主体调用控制器方法,例如testViewCustomerAsRoleAdmin和testViewCustomerAsRoleUser 。 这是无法validation的,因为控制器将Customer返回到完全填充的视图,并且每个字段都可通过getter访问。 我所追求的是实体级别的某种字段级安全性,我可以使用Spring Security注释: @PreAuthorize(“hasRole(‘ROLE_ADMIN’)”) public String getPhoneNumber() { return phoneNumber; } 如果在未经授权的情况下尝试访问该字段时,这可能会引发AccessDeniedException ,这将是理想的。 泽西项目似乎有这种概念, 这里提到这里和这里的一个例子。 但它似乎仅限于基于角色的安全性,而不是@PreAuthorize提供的完整SpEL支持 有没有办法或使用Spring Security实现此类事情,我知道安全上下文或SpEL评估上下文在实体中不可用,因为它们不是Spring管理的。 如果没有,是否还有其他方法可以让我实现同样的目标? 编辑: 我不知道内部的Spring Security框架,但似乎可以在ApectJ模式下使用Spring AOP来检测域(实体)类的方法。 这将是获取AccessDecisionManager并传递身份validation(可能从SecurityContextHolder获得)以及域类方法(如果存在)上的注释内容的情况。 有没有人有做这种事情的经验?

Spring MVC 3.0基本身份validation实现

我正在使用来自ASP.NET的Spring MVC框架将我的Web应用程序转换为Java(虽然这是学习它的好方法 – :))我需要在我的应用程序中实现身份validation:请告诉我,我的方法是否良好且足够专业,如果不是这样做的最佳做法: 首先,我正在编写User class,其中包含有关当前用户firstname / lastname / email / id / etc的所有信息…. class User implements Serializable{ private String firstName; private String lastName; private Long id; private String email; ///Settters and Getters } 我正在实现名为DlSession的类并在sesison级别上实现它。 class DlSession implements Serializable{ private User currentUser; public DlSession(){} // getters and setters: } 当用户提交他的用户/通行证时,我正在validation凭证,以及用户是否存在将所有用户数据检索到User类的实例。 然后我将Session中的currentUser设置为我检索到的用户: mySesison.setCurrentUser(user); 为了validation身份validation,我需要检查: if (mySession.getcurrentUser() […]

Spring Boot中的ACL安全性

我在Spring Boot应用程序中通过Java配置设置ACL时遇到问题。 我创建了一个小项目来重现问题。 我尝试过几种不同的方法。 我遇到的第一个问题是EhCache,在我修复之后(我假设我做了)我再也无法登录了,看起来所有的数据都消失了。 有4个类具有不同的配置: ACLConfig1.class ACLConfig2.class ACLConfig3.class ACLConfig4.class 所有@PreAuthorize和@PostAuthorize注释都按预期工作,但hasPermission除外。 控制器拥有4个端点:一个用于用户,一个用于管理员,一个用于公共,最后一个给我带来麻烦@PostAuthorize(“hasPermission(returnObject,’administration’)”) 我很确定DB中的插入是正确的。 这个类是四个中的一个,也是我尝试过的最后一个类: @Configuration @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) public class ACLConfig4 { @Autowired DataSource dataSource; @Bean public EhCacheBasedAclCache aclCache() { return new EhCacheBasedAclCache(aclEhCacheFactoryBean().getObject(), permissionGrantingStrategy(), aclAuthorizationStrategy()); } @Bean public EhCacheFactoryBean aclEhCacheFactoryBean() { EhCacheFactoryBean ehCacheFactoryBean = new EhCacheFactoryBean(); ehCacheFactoryBean.setCacheManager(aclCacheManager().getObject()); ehCacheFactoryBean.setCacheName(“aclCache”); return ehCacheFactoryBean; } @Bean […]

JWT如何与Spring MVC一起使用来创建令牌和validation令牌?

我实际上希望对JWT概念以及它如何与Spring MVC工作有更多更清楚的理解。 我找到了链接https://github.com/nielsutrecht/jwt-angular-spring ,其程序运行得非常好。 但我想知道它如何创建令牌,然后用户如何登录应用程序。 我需要澄清/回答它是如何工作的? 请做好。 我的理解:在我看来,当你启动应用程序时,将调用GenericFilterBean实现类,它将生成JWT令牌并将其发送到本地存储中的UI(不确定),然后此令牌将带有请求和标头然后它将得到validation,并将访问给用户? 我想把一些代码片段作为参考(即使你可以从提到的链接中查找代码) AuthenticationTokenProcessingFilter.java public class AuthenticationTokenProcessingFilter extends GenericFilterBean { private final UserDetailsService userService; public AuthenticationTokenProcessingFilter(UserDetailsService userService){ this.userService = userService; } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException{ HttpServletRequest httpRequest = this.getAsHttpRequest(request); String authToken = this.extractAuthTokenFromRequest(httpRequest); String userName = TokenUtils.getUserNameFromToken(authToken); if (userName != null) { […]

没有web.xml的Spring安全自定义身份validationfilter

使用注释和java配置,我不太清楚如何为spring security注册一个重写的filter。 我想要实现的是在不显示登录表单的情况下进行自动登录,因为此时用户已经过身份validation。 因此,只会读取标题参数并使用spring security进行授权。 这是我正在尝试的简化版本,Spring安全性正常工作,除了有时显示登录屏幕。 引导BypassLoginFilter是我需要的全部内容。 另外在某处读取http自动配置应该关闭这种行为,但不知道如何在纯java配置中实现。 SecurityWebApplicationInitializer.java import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer; public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer{ } SecurityConfig .java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.WebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.web.authentication.logout.LogoutFilter; @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(securedEnabled=true, prePostEnabled=true) public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override public void configure(WebSecurity web) throws Exception { […]

具有多个角色的Spring安全访问

我想为具有以下角色之一的用户(ROLE1或ROLE2)定义一些页面的访问权限 我正在尝试在我的spring security xml文件中配置它,如下所示: 我尝试过各种方式: access=”hasRole(‘ROLE1, ROLE2’)” access=”hasRole(‘ROLE1’, ‘ROLE2’)” access=”hasAnyRole(‘[ROLE1’, ‘ROLE2]’)” 等等 但似乎没有任何工作。 我一直在exception java.lang.IllegalArgumentException: Unsupported configuration attributes: 要么 java.lang.IllegalArgumentException: Failed to parse expression ‘hasAnyRole([‘ROLE1’, ‘ROLE2′])’ 应该如何配置? 谢谢

@PostFilter和@PreFilter如何工作

作为spring注释的新手,我需要澄清下面的代码。 @PostFilter(“hasPermission(filterObject, ‘READ’) or hasRole(‘ROLE_ADMIN’)”) public List getUsers(String orderByInsertionDate, Integer numberDaysToLookBack) throws AppException ; 所以这意味着getUsers返回的用户列表将只包含对调用对象具有完全”READ”访问权限的元素,或者调用对象具有”ROLE_ADMIN”角色。 谢谢。

如何在Spring的CAS服务属性中正确设置服务URL

使用Spring Security + CAS时,我一直使用发送到CAS的回调URL(即服务属性)来阻止小路障。 我已经看了很多这样的例子,但它们都使用硬编码的URL(甚至是Spring的CAS文档 )。 一个典型的剪辑看起来像这样…… 首先,我不想硬编码服务器名称或端口,因为我希望这个WAR可以在任何地方部署,我不希望我的应用程序在编译时绑定到特定的DNS条目。 其次,我不明白为什么Spring无法自动检测我的应用程序的上下文和请求的URL以自动构建URL。 该声明的第一部分仍然有效,但As Raghuram通过此链接指出,出于安全原因,我们无法信任来自客户端的HTTP Host Header。 理想情况下,我希望服务URL完全符合用户的要求(只要请求有效,例如mycompany.com的子域),所以它是无缝的,或者至少我只想指定一些相对于我的路径应用程序上下文root并让Spring动态确定服务URL。 像下面这样的东西…… 要么… 这是否可能或容易,或者我错过了明显的?

多模块项目中的Spring配置

我是Spring的新手,并且遇到了包含一个Web模块的多个模块的单个项目。 Web模块使用Spring MVC,但我想知道我是否可以在项目级别拥有主要的Spring配置来处理整个项目,这样我就可以充分利用Spring框架。 main -module1 -module2 -web +spring3.1, spring-security 这种情况的最佳设置是什么?