1

春のセキュリティを手伝ってくれる人はいますか?ビューの下に 2 つのフォルダーがあります適切なフォルダ、つまり supersusers のフォルダと、ROLE_USER のみを含むフォルダを allusers のフォルダに移動します。どうすればいいのかわからない。

spring-security.xml

<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org  /2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.3.xsd">

<http auto-config="true" use-expressions="true">

    <!-- interceptor pages -->
    <intercept-url pattern="/**" access="permitAll" />
    <intercept-url pattern="/index" access="permitAll" />
    <intercept-url pattern="/allusers/**" access="hasRole('ROLE_USER')" />
    <intercept-url pattern="/superusers/**" access="hasAnyRole('ROLE_ADMIN','ROLE_USER')" />
    <intercept-url pattern="/logout" access="permitAll" />
    <intercept-url pattern="/denied" access="permitAll" />
    <intercept-url pattern="/getAllUsers"  access="hasRole('ROLE_ADMIN')" />
    <access-denied-handler error-page="/403" />


    <form-login login-page="/index" default-target-url="/welcome"
        authentication-failure-url="/loginfailed" />

    <logout logout-success-url="/logout" />

</http>
<authentication-manager>
    <authentication-provider>
        <jdbc-user-service data-source-ref="dataSource"
            users-by-username-query="
                            select username,password,'true' AS isEnabled from USER where USERNAME=?"  
            authorities-by-username-query="
            select u.username ,r.`ROLE_NAME`,u.`PASSWORD` from USER u, USER_ROLE ur,ROLE r where (u.user_id = ur.user_id) 
            and (r.role_id=ur.role_id)  and u.username =? " />
    </authentication-provider>
</authentication-manager>

ここに私の mvc-dispatcher.xml があります

    <beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
    http://www.springframework.org/schema/beans     
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<context:component-scan base-package="com.secure.weblayer" />
<mvc:annotation-driven />
<context:annotation-config />
<mvc:resources mapping="/resources/**" location="/resources/" />
<bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/" />
     <!--   <property name="prefix" value="/WEB-INF/views/allusers/" />-->
     <!--   <property name="prefix" value="/WEB-INF/views/superusers" />-->
    <property name="suffix" value=".jsp" />
</bean>
<bean id="messageSource"
    class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames" value="mymessages"></property>
</bean>
<bean
   class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
   </beans>

ご覧のとおり、ログインには spring-security.xml で sql-query を使用しています。ログインはできますが、目的のページにリダイレクトできません。しかし、xml ファイルでプロパティを : property name="prefix" value="/WEB-INF/views/allusers"
または : property name="prefix" value="/WEB-INF/views/superusers" に変更すると、これらのフォルダ内のすべてのページにアクセスできますが、同時にアクセスすることはできません。


助けてください。

4

1 に答える 1

1

すべてのビューに影響するため、InternalResourceViewResolverには触れたくありません。

アクセス権が正しくないので、このようにする必要があります。

すべてのユーザーは通常のユーザーと管理者ユーザーです。

<intercept-url pattern="/allusers/**" access="hasAnyRole('ROLE_ADMIN','ROLE_USER')" />

スーパーユーザーは単なる管理者ユーザーです

<intercept-url pattern="/superusers/**" access="hasRole('ROLE_ADMIN')" />

また、以下を削除します。

<intercept-url pattern="/**" access="permitAll" />

そして、ログイン後に正しいページにリダイレクトしたいだけです。したがって、これをログインコントローラに使用します。

@Controller
public class LoginController {
    @RequestMapping(value="/welcome", method = RequestMethod.GET)
    public String printWelcome(ModelMap model, SecurityContextHolderAwareRequestWrapper request) {
        if(request.isUserInRole("ROLE_ADMIN")) {
            return "redirect:/superusers";
        } else {
            return "redirect:/allusers";
        }
    } 
}
于 2012-09-02T02:43:57.743 に答える