小编rin*_*nce的帖子

如何在自定义筛选器中使用Java配置注入AuthenticationManager

我正在使用Spring Security 3.2和Spring 4.0.1

我正在努力将xml配置转换为Java配置.当我在我的过滤器中注释AuthenticationManager@Autowired,我得到一个例外

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.security.authentication.AuthenticationManager] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过注射AuthenticationManagerFactoryBean但是也失败了类似的例外.

这是我正在使用的XML配置

<?xml version="1.0" encoding="UTF-8"?> <beans ...>
    <security:authentication-manager id="authenticationManager">
        <security:authentication-provider user-service-ref="userDao">
            <security:password-encoder ref="passwordEncoder"/>
        </security:authentication-provider>
    </security:authentication-manager>

    <security:http
            realm="Protected API"
            use-expressions="true"
            auto-config="false"
            create-session="stateless"
            entry-point-ref="unauthorizedEntryPoint"
            authentication-manager-ref="authenticationManager">
        <security:access-denied-handler ref="accessDeniedHandler"/>
        <security:custom-filter ref="tokenAuthenticationProcessingFilter" position="FORM_LOGIN_FILTER"/>
        <security:custom-filter ref="tokenFilter" position="REMEMBER_ME_FILTER"/>
        <security:intercept-url method="GET" pattern="/rest/news/**" access="hasRole('user')"/>
        <security:intercept-url method="PUT" pattern="/rest/news/**" access="hasRole('admin')"/>
        <security:intercept-url method="POST" …
Run Code Online (Sandbox Code Playgroud)

java spring spring-security spring-java-config

74
推荐指数
1
解决办法
9万
查看次数

如何使用 Liquibase Hibernate 插件配置主键名称的长度

我正在使用 Liquibase Hibernate 插件生成从实体类到数据库的 diffChangeLog。

我遇到的一个问题是 Liquibase 为主键生成的名称太短。

例如我有2张桌子,

unsub_template 和 unsub_template_item

生成的变更集分别是

<changeSet author="rince(generated)" id="1405359138759-50">
        <createTable tableName="unsub_template">
            <column autoIncrement="true" name="id" type="BIGINT">
                <constraints primaryKey="true" primaryKeyName="unsub_templatPK"/>
            </column>
Run Code Online (Sandbox Code Playgroud)

<changeSet author="rince(generated)" id="1405359138759-51">
        <createTable tableName="unsub_template_item">
            <column autoIncrement="true" name="id" type="BIGINT">
                <constraints primaryKey="true" primaryKeyName="unsub_templatPK"/>
            </column>
Run Code Online (Sandbox Code Playgroud)

请注意,primaryKeyName 属性均为 unsub_templatPK,长度均为 15 个字符

我做了一些调试,发现了长度为 的原因org.hibernate.mapping.PersistentClassPK_ALIAS那里定义了一个静态字段

private static final Alias PK_ALIAS = new Alias(15, "PK");
Run Code Online (Sandbox Code Playgroud)

有什么办法可以配置 PK_ALIAS 吗?

java hibernate liquibase

5
推荐指数
0
解决办法
365
查看次数

使用global-method-security,Access Denied错误将作为HTTP 500错误返回

我正在尝试使用Spring Security Annotations来实现安全性,而不是在XML中定义规则.它似乎工作,但当我遇到访问被拒绝错误时,我得到一个返回的HTTP状态代码500.我的tomcat日志文件中没有看到任何异常.当执行命中我的AuthenticationEntryPoint时,响应将被提交.

如果我恢复使用XML中的规则并获得拒绝访问错误,我会返回401状态代码返回.

该方法使用@PreAuthorize进行注释

@GET
@Produces(MediaType.APPLICATION_JSON)
@PreAuthorize("hasRole('user')")
public String list() throws IOException 
Run Code Online (Sandbox Code Playgroud)

这是我的XML(之前的XML规则被注释掉了)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:security="http://www.springframework.org/schema/security"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd">

    <security:debug/>

    <security:global-method-security pre-post-annotations="enabled"/>

    <security:authentication-manager id="authenticationManager">
        <security:authentication-provider user-service-ref="userDao">
            <security:password-encoder ref="passwordEncoder"/>
        </security:authentication-provider>
    </security:authentication-manager>

    <security:http
            realm="Protected API"
            use-expressions="true"
            auto-config="false"
            create-session="stateless"
            entry-point-ref="unauthorizedEntryPoint"
            authentication-manager-ref="authenticationManager">
        <security:access-denied-handler ref="accessDeniedHandler"/>
        <security:custom-filter ref="tokenAuthenticationProcessingFilter" position="FORM_LOGIN_FILTER"/>
        <security:custom-filter ref="tokenFilter" position="REMEMBER_ME_FILTER"/>
        <!--<security:intercept-url method="GET" pattern="/rest/news/**" access="hasRole('user')"/>-->
    </security:http>

</beans>
Run Code Online (Sandbox Code Playgroud)

java security methods spring annotations

3
推荐指数
1
解决办法
2111
查看次数