как применить экран по разрешению экрана весной mvc? - PullRequest
1 голос
/ 04 мая 2020

Я - новичок весной MVC Framework и создаю приложение, в котором у меня есть роль и роль с разными разрешениями на разных экранах. Например: - на панели пользователя у пользователя есть два разрешения (чтение и запись) и в Пользователь страницы второго экрана имеет права (Чтение, Запись и Создание). поэтому просто хочу знать, как я мог бы добавить это разрешение в сеанс, чтобы получить их с типом экрана на каждом экране, когда я проверяю разрешение или другой метод, чтобы сделать этот процесс более эффективным способом.

 this my user validation code at login time:- 




  public String validate(String userName, String password, HttpServletResponse response, HttpServletRequest request,
                Model model) {
            logger.debug("Starting of the method validate");
            System.out.println("validate");

            Session session = null;

            try {
                AppConfig aapConfig = new AppConfig();
                List<UsersTable> userList = aapConfig.findAll(UsersTable.class);

                System.out.println("############userList length is " +userList.size());

                if (!userList.isEmpty()) {
                    System.out.println("*****************UserList is not emptry");
                    Map<String, UsersTable> userMap = userList.stream().filter(e -> e.getUsername() != null)
                            .collect(Collectors.toMap(e -> e.getUsername(), e -> e, (x, y) -> x));

                    if (userMap.containsKey(userName)) {
                        UsersTable user = userMap.get(userName);
                        if (StringUtils.equals(EncryptDecryptPassword.decrypt(user.getUserpassword(), "AirtelSiva"),
                                password)) {
                            String userFullName = user.getUserfirstname();
                            String circleId = user.getUsercircle();
                            System.out.println("&&&&&&&&&& Circle ID is "+circleId);
                            HttpSession httpSession =request.getSession();
                            String id = httpSession.getId();
                            System.out.println(id);
                            httpSession.setAttribute("userFullName", userFullName);
                            httpSession.setAttribute("userName", userName);
                            httpSession.setAttribute("circleId", circleId);

                            // saving the userName with the unique session Id
                            UserSession userSession = new UserSession();
                            userSession.setUserName(userName);
                            userSession.setSessionId(id);
    return"";
    }

1 Ответ

2 голосов
/ 04 мая 2020

С spring-security вы можете предоставить эту авторизацию с минимальными усилиями. Добавьте необходимые зависимости к вашему POM и настройте аутентификацию. Помните, что при добавлении зависимости spring-security ее версия должна быть совместима с используемой вами версией Spring.

Вы можете просто предоставить аутентификацию и авторизацию, например

@Configuration
@EnableWebSecurity
public class DemoSecurityConfig extends WebSecurityConfigurerAdapter
{

    @Override
    protected void configure( AuthenticationManagerBuilder auth ) throws Exception
    {
     // Using in-memory authentication
        User.UserBuilder users = User.withDefaultPasswordEncoder();
        auth.inMemoryAuthentication()
            .withUser( users.username( "john" ).password( "john1234" ).roles( "READ", "WRITE" ) )
            .withUser( users.username( "doe" ).password( "doe1234" ).roles( "READ", "WRITE", "CREATE" ) );
    }

    /**
     * This allows adding custom login-form and add HTTP URL security
     *
     * @param http
     * @throws Exception
     */
    @Override
    protected void configure( HttpSecurity http ) throws Exception
    {
        http.authorizeRequests()
            .antMatchers( "/" ).permitAll()
            .antMatchers( "/dashboard" ).hasAnyRole( "READ","WRITE" )
            .antMatchers( "/anotherPage" ).hasAnyRole( "READ","WRITE","CREATE" )
            .anyRequest()
            .authenticated()
            .and()
            .formLogin() // Add form login
            .loginPage( "/showMyLoginPage" ) // Pointing to custom login form. This line is optional as spring by default provides a login page
            .loginProcessingUrl( "/authenticateTheUser" ) // No coding needed. Just provide some endpoint. You need not implement this endpoint. Spring will take care of it.
            .permitAll()
            // Other necessary validations like CSRF or cookie policy
}

. учебник по весеннему официальному выполните c здесь .

И как только вы выполните авторизацию с помощью Spring-security. Вы можете спросить ваш шаблонный движок [если он поддерживает]. чтобы показать или скрыть определенные разделы страницы в зависимости от ролей зарегистрированного пользователя.

В качестве примера, вот как можно скрыть ссылку на основе роли пользователя в JSP, добавив поддержку безопасности, например: <%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %>

Здесь только пользователи с ролью ADMIN могут видеть эту ссылку.

<security:authorize access="hasRole('ADMIN')">
    <hr>
    <p><a href="${pageContext.request.contextPath}/admin">Link to admin page</a> ( Only admin can see this )</p>
    <hr>
</security:authorize>

Эта ссылка содержит всю необходимую информацию для начала работы spring-security.

...