gpt4 book ai didi

java - Spring Security - 动态登录部分

转载 作者:行者123 更新时间:2023-12-04 06:24:01 24 4
gpt4 key购买 nike


我的应用程序分为品牌。每个员工都可以登录自己的品牌。这意味着对一个品牌拥有授权的一名员工无法登录其他品牌。一个用户可能有几个品牌。

登录链接应如下所示:myapp.com/Management/login/#www.brand.com我将在 JS 中解析 www.brand.com 并在用户登录时放入一个变量:

j_brand:www.brand.com  
j_username:user
j_password:pass
  1. 我如何通过登录过程验证此用户属于他请求登录的品牌,如果不匹配,也拒绝其请求。

  2. 当用户注销时,我想将他重定向到带有品牌的正确页面:myapp.com/Management/login/#www.brand.com,我怎样才能将 #www.brand.com 添加到重定向路径。

我正在我的登录过程中实现 UserDetailsS​​ervice

谢谢。

最佳答案

所以这里是第 1 部分的可能答案。我不知道你的第二个问题是什么,但我有一个你可以追求的想法。不过,我在修改登录过程时做了类似的事情。

对于第 1 部分,有两个步骤:

首先:编写一个自定义安全过滤器,添加额外的品牌检查验证。

public class BrandAwareUserPasswordAuthenticationkFilter extends UsernamePasswordAuthenticationFilter {   

@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
Authencation auth = super.attemptAuthentication(request, response);

if(!userBelongsToBrand()) { // you're on your own here
throw new BadCredentialsException("your message here"); // you can elect to throw a different exception
}

return auth;
}
}

第二:实例化您的过滤器并将其连接到 spring security 以代替默认的用户/密码身份验证过滤器。您可能想尝试一下我这里的一些配置设置...我正在从我的项目文件中复制它们。

<bean name="brandAwareFilterBean" class="com.drumpus.webapp.LoginVelocityCheckFilter">
<property name="authenticationManager" ref="authenticationManager"/>
<property name="filterProcessesUrl" value="/doLogin"/>
<property name="authenticationSuccessHandler">
<bean class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler">
<property name="defaultTargetUrl" value="/account/"/>
<property name="alwaysUseDefaultTargetUrl" value="false"/>
</bean>
</property>
<property name="authenticationFailureHandler">
<bean class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
<property name="defaultFailureUrl" value="/login?failed=true"/>
</bean>
</property>
</bean>


<security:http auto-config="false" use-expressions="true" entry-point-ref="authenticationEntryPoint">

<security:custom-filter position="FORM_LOGIN_FILTER" ref="brandAwareFilterBean"/>

<!-- the rest of your config -->

</security:http>

对于第 2 个问题,我相信您的关键在于创建一个自定义 AuthenticationSuccessHandler 并将其插入到您的新过滤器中。不过,我从未这样做过,因此无法给您非常具体的建议。

祝您好运,希望对您有所帮助!

关于java - Spring Security - 动态登录部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6235515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com