Spring Security问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Security问题相关的知识,希望对你有一定的参考价值。
废话不多说,请大侠们帮我看看错在哪里了 我没有定义一个""的bean啊!
报错如下:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named '' is defined
下面是我的SPRING DI 主要代码:
<bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy">
<property name="filterInvocationDefinitionSource">
<value>
PATTERN_TYPE_APACHE_ANT
/**=httpSessionContextIntegrationFilter,basicProcessingFilter,
exceptionTranslationFilter,filterInvocationInterceptor
</value>
</property>
</bean>
<bean id="httpSessionContextIntegrationFilter" class="org.acegisecurity.context.HttpSessionContextIntegrationFilter">
<property name="allowSessionCreation" value="false"></property>
</bean>
<bean id="basicProcessingFilter" class="org.acegisecurity.ui.basicauth.BasicProcessingFilter">
<property name="authenticationManager" ref="authenticationManager"></property>
<property name="authenticationEntryPoint" ref="basicProcessingFilterEntryPoint"></property>
</bean>
<bean id="basicProcessingFilterEntryPoint" class="org.acegisecurity.ui.basicauth.BasicProcessingFilterEntryPoint">
<property name="realmName" value="Acegi First Demo Realm"></property>
</bean>
<bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">
<property name="providers">
<list>
<ref local="daoAuthenticationProvider"/>
</list>
</property>
</bean>
<bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="inMemDaoImpl"/>
</bean>
<bean id="inMemDaoImpl" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">
<property name="userMap">
<value>admin=password,ROLE_ADMIN</value>
</property>
</bean>
<bean id="exceptionTranslationFilter" class="org.acegisecurity.ui.ExceptionTranslationFilter">
<property name="authenticationEntryPoint" ref="basicProcessingFilterEntryPoint"></property>
<property name="createSessionAllowed" value="false"></property>
</bean>
<bean id="filterInvocationInterceptor" class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
<property name="authenticationManager" ref="authenticationManager"></property>
<property name="accessDecisionManager" ref="httpRequestAccessDecisionManager"></property>
<property name="objectDefinitionSource">
<value>
PATTERN_TYPE_APACHE_ANT
/se.jsp=ROLE_ADMIN
</value>
</property>
</bean>
<bean id="httpRequestAccessDecisionManager" class="org.acegisecurity.vote.AffirmativeBased">
<property name="decisionVoters">
<list>
<ref bean="roleVoter"/>
</list>
</property>
</bean>
<bean id="roleVoter" class="org.acegisecurity.vote.RoleVoter">
</bean>
<bean id="authenticationLoggerListener" class="org.acegisecurity.event.authentication.LoggerListener">
</bean>
<bean id="authorizationLoggerListener" class="org.acegisecurity.event.authorization.LoggerListener">
</bean>
1 Dao方式的认证授权原理
1.1 认证授权简略过程:
1.2 Spring security配置思路
2 Dao 形式的认证授权实例
2.1 Web.xml配置
2.2 spring securtity配置
2.2.1 命名空间
2.2.2 默认设定
2.2.3 认证设定
2.2.4 授权设定
2.3 完整的: spring-security.xml
2.4 Login.jsp
我发给你了,我的帐号是 hulei0217@126.com追问
没有收到啊 麻烦重新发这个邮箱:309770939@qq.com
参考技术B 现在出现一个问题,在一个用户登陆了以后,没有正常退出,比如直接关闭浏览器你去看看spring security 的配置,有一个配置项是多次登陆后,强制注销前面本回答被提问者采纳 参考技术C http://blog.csdn.net/k10509806/archive/2011/04/28/6369131.aspx在spring-security + spring-data-jpa中从userRepository接收数据的问题[重复]
【中文标题】在spring-security + spring-data-jpa中从userRepository接收数据的问题[重复]【英文标题】:Problem with receiving data from userRepository in spring-security + spring-data-jpa [duplicate] 【发布时间】:2019-12-10 15:19:20 【问题描述】:我真的不知道 security 和 spring data jpa 是如何工作的,但是当我尝试从数据库接收其他用户数据时,它就像一个无限循环,并且只显示我的帐户信息超过 9k 次,然后在几秒钟后它在 Web 浏览器中崩溃并出现错误 SyntaxError: JSON.parse: unterminated string literal at line 1 column 39978 of the JSON data, 我的 userRepository 是我的 UserDetailsServiceImplementation 的一部分,它在 Spring Security 中用作 SQL 数据库的身份验证。没问题,我可以登录我的账号,但是我不能查询和查看其他人的数据信息。
我不知道如何绕过它。也许这是一项安全功能,无法访问其他人的凭据。
用户存储库
@Repository
public interface UserRepository extends JpaRepository<User, Long>
public User findByUsername(String username);
@Query("SELECT * FROM user")
public List<User> findAll();
控制器
@RestController
@RequestMapping("/v1/api")
public class HomeApiController
@Autowired
private UserRepository userRepository;
@GetMapping("/users")
public List<User> getUsers()
return userRepository.findAll();
用户
@Entity
@Table
public class User
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String username;
@Column
@JsonIgnore
private String password;
@Column
private boolean enabled;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Authority> authorities;
public User()
then field based constructor + getters and setters
权威
@Entity
@Table
public class Authority
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private Long id;
@Column
private String role;
@ManyToMany(mappedBy = "authorities")
private Set<User> user;
public Authority()
field constructor + getters and setters
我希望查询和检索数据库中用户表中的所有其他用户,该表也用于根据系统中的角色授权用户。
json 输出显示...
"id":1,"username":"Admin","enabled":true,"authorities":["role":"ROLE_USER","user":["id":1,"username":"Admin","enabled":true,"authorities":["role":"ROLE_USER","user":["id":1,"username":"Admin","enabled":true,"authorities":["role":"ROLE_USER","user":["id":1,"username":"Admin","enabled":true,"authorities":["role":"ROLE_USER","user":
它是无限嵌套的。 我认为当局有问题 当我清除 user_role 表时,输出效果很好
id 1 用户名“管理员” 启用 true 当局 []
怎么了?
【问题讨论】:
哦,谢谢!这完全解决了我的问题,我在 ManyToMany 注释字段上使用了 JsonManagedReference、JsonBackReference 注释。 【参考方案1】:您必须使用@JsonIgnore 注释授权类中的用户集或注释用户类中的授权集,具体取决于您在 API 调用中的需要。
@Entity
@Table
public class User
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String username;
@Column
@JsonIgnore
private String password;
@Column
private boolean enabled;
@JsonIgnore
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Authority> authorities;
public User()
或者
@Entity
@Table
public class Authority
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private Long id;
@Column
private String role;
@JsonIgnore
@ManyToMany(mappedBy = "authorities")
private Set<User> user;
public Authority()
编辑:我也建议使用 DTO 来最小化耦合并避免此类问题
【讨论】:
创建单独的 DTO 或使用 JsonIgnore 注释现有类有什么更好的主意? 我确实建议使用 DTO,因为它减少了实体和响应之间的耦合,但实际上它取决于您需要在 API 响应中返回什么,如果您需要返回所有类字段数据除了一个,那么最好只用 @JsonIgnore 注释该字段,但让我们假设您只需要返回用户名和角色,在这种情况下最好使用 DTO 对象。检查此链接oodlestechnologies.com/blogs/…以上是关于Spring Security问题的主要内容,如果未能解决你的问题,请参考以下文章
Spring mvc / security:从spring security中排除登录页面
没有 JSP 的 Spring Security /j_spring_security_check
未调用 Spring Security j_spring_security_check
Spring Security 登录错误:HTTP 状态 404 - /j_spring_security_check